При выполнении сценария Powershell (в 2.0) с использованием переключателя командной строки -File и явном определении входных параметров в Param, код выхода всегда "0" (никогда не завершается с ошибкой) вместо правильного возврат определенного или ожидаемого кода ошибки.
Это не происходит при использовании явных определений параметров и переключателя -Command , однако для посторонних целей мне нужно сохранить переключатель -File в моих сценариях.
Любая помощь с обходным решением (которая не включает удаление явных определений параметров) была бы чрезвычайно полезной.
Powershell "не может вернуть правильный код завершения":
exit1.ps1: вызов скрипта, который явно определяет параметры. Errorlevel всегда равен 0, даже если есть части скрипта, которые безуспешно терпят неудачу.
param(
[Parameter(mandatory=$true)][string]$arg1,
[Parameter(mandatory=$true)][string]$arg2,
[Parameter(mandatory=$true)][string]$arg3
);
exit 1;
Выход:
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
0
Теперь давайте попробуем то же самое при изменении функции param, чтобы она была менее явной:
Exit1LooseParam.ps1:
param(
$arg1,
$arg2,
$arg3
);
exit 1;
Выход (с тремя параметрами):
C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three"
C:\temp\testnant>echo %errorlevel%
1
Похоже, что когда вы явно определяете входные параметры, Powershell по какой-то причине «сходит с ума» и не может вернуть правильный код выхода.
Кто-нибудь имеет обходной путь или сможет объяснить, почему это происходит?