#powershell #installation #adfs
#powershell #установка #adfs
Вопрос:
Это часть моего скрипта для установки ADFS. Довольно просто, но кажется, что Start-Process забавным образом анализирует переключатели. Я чего-то не понимаю?
write-host "Installing ADFS - process should take 30-45 seconds"
$installtime=get-date -uformat "%Y_%h_%d_%H_%M"
$logfile="$pwdadfssetup_$installtime.log"
$ADFSInstall = "AdfsSetup.exe"
$ADFSInstallParams = '/quiet /logfile ' $logfile
Start-Process $ADFSInstall $ADFSInstallParams -wait
if ({gc -path $logfile | select-string -pattern "AD FS 2.0 is already installed on this computer"} -eq $null){write-host -ForegroundColor Cyan "ADFS Installed"} Else{write-host -ForegroundColor "There was an error Installing ADFS, please check the log file: $logfile;break}
Если я выполняю приведенный выше сценарий, я получаю следующее в файле журнала:
Майкрософт.IdentityServer.Ошибка установки: 5124: 6 [ 2070099085]: Система.Исключение FormatException: Индекс (основанный на нуле) должен быть больше или равен нулю и меньше размера списка аргументов. в System.Text.StringBuilder.AppendFormat (поставщик IFormatProvider, формат строки, аргументы Object[]) в Microsoft.IdentityServer.Установка.Диагностика.Журнал отслеживания.Строка записи (TraceEventType EventType, сообщение о строке, аргументы Object[])
Если я выполню точно такую же команду вручную (из выходных данных write-host), все будет работать нормально.
Есть идеи? Спасибо.
Комментарии:
1. Здесь нет ответа. Давайте угадаем … в $ pwd в пути есть пробел?
Ответ №1:
Я не могу удалить вопрос, но, изучив старые журналы, я обнаружил, что ошибка возникает даже при обычном запуске команды. Таким образом, приведенный выше скрипт фактически работает так, как задумано.
Ответ №2:
(Я не совсем понимаю, что здесь происходит, но здесь есть две возможности.)
Один из вариантов заключается в том, что ваш get-date
работает не так, как вы предполагаете. В результате он $logfile
содержит знак процента ( %
), что вызывает «внедрение строки формата» в установщик AD FS 2.0. Сообщение об ошибке указывает в этом направлении.
Однако я не смогу воспроизвести это, если я запущу ваш сценарий PowerShell в своей собственной системе.
Также обратите внимание, что похоже, что вы передаете три аргумента командной строки ( /quiet
, /logfile
и имя файла журнала) в одном аргументе. Попробуйте передать их следующим образом:
$ADFSInstallParams = @('/quiet', '/logfile', $logfile)
Start-Process $ADFSInstall @ADFSInstallParams -wait
Однако, если бы это было причиной проблемы, я бы ожидал, что adfssetup.exe
я буду жаловаться на ошибку, подобную command line argument '/quiet /logfile ...' not recognized
.
Комментарии:
1. Вы правы. И что я обнаружил, исследуя старые журналы (фактически запустил программу восстановления, чтобы получить их), так это то, что ошибка возникает даже при запуске ADFSSetup.exe обычным способом. Таким образом, приведенный выше скрипт фактически работает так, как задумано. Спасибо за вашу помощь.