При выполнении сценария 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, кажется, по какой-то причине «теряет свой дурацкий разум» и не может вернуть правильный код выхода.
Есть ли у кого-нибудь обходной путь или может объяснить, почему это происходит?