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?
To wydaje się zwróci kod wyjścia prawidłowo. Dzięki! – JonnyG
Dziękuję za to, właśnie załatwiłem problem dla mnie też :) –
bez tego mogłem tylko dostać wyjście, aby powrócić 0 lub 1 – cmcginty