Powershell не возвращает правильный код выхода

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

Есть ли у кого-нибудь обходной путь или может объяснить, почему это происходит?


person JonnyG    schedule 17.01.2012    source источник


Ответы (1)


Хм, странно, я ожидал, что exit 1 сработает в обоих случаях. По крайней мере, вы можете использовать это для обоих:

[Environment]::Exit(1)

person Andy Arismendi    schedule 17.01.2012
comment
Спасибо за это, разобрался и для меня тоже :) - person Ally Reilly; 31.08.2012
comment
без этого я мог бы получить только выход, чтобы вернуть 0 или 1 - person cmcginty; 20.05.2014