12

-File 명령 줄 스위치를 사용하여 Powershell 스크립트 (2.0)를 실행할 때 Param에서 입력 매개 변수를 명시 적으로 정의하면 종료 코드는 항상 "0"(실패하지 않음) 정의되거나 예상 된 오류 코드를 올바르게 반환하는 대신
명시 적 매개 변수 정의와 -command 스위치를 사용하는 경우에는 발생하지 않지만 불필요한 경우 스크립트에 -File 스위치를 유지해야합니다.Powershell이 ​​적절한 종료 코드를 반환하지 못함

해결 방법 (명시 적 매개 변수 정의 제거는 필요하지 않음)과 관련된 도움은 매우 유용합니다.

PowerShell은 "올바른 종료 코드를 반환하지"

exit1.ps1 : 명시 적으로 매개 변수를 정의 스크립트를 호출합니다. 비정상적으로 실패하는 스크립트 부분이 있더라도 Errorlevel은 항상 0입니다.

Exit1LooseParam.ps1 :

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

는 출력 : 덜 명시하기 위해 PARAM 기능을 수정할 때 이제

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

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




, 같은 일을 시도 할 수 있습니다

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 




당신이 명시 적으로 입력 매개 변수를 정의 할 때, 파워 쉘은 어떤 이유로 "그 빌어 먹을 정신을 잃고"로 보인다 반환하지 나타납니다 적절한 종료 코드.

사람이 해결 방법이 있거나 이런 일이 이유를 설명 할 수 있습니까?

답변

14

흠. 이상하게 들리면, exit 1 두 가지 경우 모두 작동 할 것으로 기대됩니다. 적어도 둘 다 사용할 수 있습니다 :

[Environment]::Exit(1)

+0

이렇게하면 종료 코드가 올바르게 반환되는 것 같습니다. 감사! – JonnyG

+0

이것에 대한 고마워, 그냥 나를 위해 문제를 해결 :) –

+0

나는이 출구를 얻을 수있는 0 또는 1 – cmcginty

관련 문제