Как заставить SCCM распознавать коды возврата после завершения сценария Powershell?
Я использую развертывание приложения SCCM 2012 для установки программного обеспечения. Конкретный тип установки - это программа установки с использованием сценариев, так как SCCM продолжал работать с ошибками проверки exe. Скрипт powershell и успешно устанавливает программное обеспечение, даже когда оно выполняется SCCM.
Проблема в том, что SCCM видит только возвращение 0 из завершения из сценария. я пробовал write-host
, return
, write-output
и просто позиция с кодом для мягкой перезагрузки. Кажется, ни один из них не читается SCCM, поскольку журнал выполнения приложения фиксирует возврат 0.
Как вы выводите коды возврата из powershell, чтобы SCCM мог их интерпретировать?
1 ответ
Существует известная проблема с кодами выхода powershell (см. Конец этого ответа), которая может проявиться при использовании сценариев установки powershell с SCCM. Чтобы обойти проблему, я принимаю две меры:
- У меня всегда SCCM вызывает командный файл, который запускает скрипт powershell, вызывая
powershell.exe
в явном виде. - Я гарантирую, что каждый путь кода в сценарии установки заканчивается явным вызовом
[System.Environment]::Exit()
,
С этими двумя мерами у меня не было проблемы, связанной с кодами выхода. Это огромная победа, потому что устранение неполадок с кодами завершения сценариев установки является медленным процессом, потому что вам приходится ждать, пока клиент SCCM вызовет ваш сценарий для каждой итерации устранения неполадок.
Вот как выглядит командный файл и скрипт powershell:
Install-Application.bat
powershell.exe .\Install-Application.ps1
exit /b %errorlevel%
Install-Application.ps1
try
{
# do a bunch of installation stuff
if ( $rebootNeeded )
{
[System.Environment]::Exit(3010)
}
[System.Environment]::Exit(0)
}
catch
{
[System.Environment]::Exit(1)
}
Почему коды выхода ненадежны, когда SCCM напрямую вызывает сценарии powershell?
Вот как мы знаем, что коды выхода ненадежны:
- Существует по крайней мере одна известная ошибка, когда powershell всегда возвращает код выхода 0 при запуске определенным образом.
- Поэтому вы можете рассчитывать только на код завершения скрипта, если вы уверены, как он запускается.
- Вы никогда не можете быть точно уверены, как SCCM запускает скрипт powershell, особенно в версиях SCCM, Windows и WMF.