12

Podczas wykonywania skryptu Powershell (w wersji 2.0) za pomocą przełącznika wiersza polecenia w wierszu poleceń i jednoznacznie definiującego parametry wejściowe w Param, kod zakończenia jest zawsze "0" (nigdy nie zawodzi) zamiast poprawnie zwracać zdefiniowany lub oczekiwany kod błędu.
Nie ma to miejsca w przypadku używania jawnych definicji parametrów i przełącznika -Kombinacja, jednak dla celów zewnętrznych, muszę zachować przełącznik -File w moich skryptach.Powershell nie zwraca poprawnego kodu wyjścia

Każda pomoc dotycząca obejścia (która nie wymaga usunięcia jawnych definicji parametrów) byłaby niezwykle pomocna.

PowerShell "nie zwróci prawidłowy kod wyjścia":

exit1.ps1: Call skrypt, który wyraźnie określa parametry. Poziom błędu wynosi zawsze 0, nawet jeśli niektóre części skryptu nieudane zawodzą.

param(
    [Parameter(mandatory=$true)][string]$arg1, 
    [Parameter(mandatory=$true)][string]$arg2, 
    [Parameter(mandatory=$true)][string]$arg3 
); 
exit 1; 

wyjściowa:

C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\exit1.ps1 "one" "two" "three" 

C:\temp\testnant>echo %errorlevel% 
0 




Teraz spróbujmy to samo podczas modyfikowania funkcji param się mniej wyraźne:

Exit1LooseParam.ps1:

param(
    $arg1, 
    $arg2, 
    $arg3 
); 
exit 1; 

wyjścia (z trzech parametrów):

C:\temp\testnant>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\Exit1looseParam.ps1 "one" "two" "three" 

C:\temp\testnant>echo %errorlevel% 
1 




Wydaje się, że gdy jawnie zdefiniować parametry wejściowe, PowerShell wydaje się „stracić swoją freakin umysł” z jakiegoś powodu i nie zwróci właściwy kod wyjścia.

Czy ktoś ma obejście lub być w stanie wyjaśnić, dlaczego tak się dzieje?

Odpowiedz

14

Hmm, to dziwne, spodziewałbym się, że w obu przypadkach zadziała exit 1. Przynajmniej można to wykorzystać dla obu:

[Environment]::Exit(1)

+0

To wydaje się zwróci kod wyjścia prawidłowo. Dzięki! – JonnyG

+0

Dziękuję za to, właśnie załatwiłem problem dla mnie też :) –

+0

bez tego mogłem tylko dostać wyjście, aby powrócić 0 lub 1 – cmcginty