source

-명령어의 종료 코드가 스크립트의 종료 코드와 같지 않습니다.

ittop 2023. 9. 14. 23:36
반응형

-명령어의 종료 코드가 스크립트의 종료 코드와 같지 않습니다.

PowerShell - Command "& scriptname"으로 스크립트를 실행해야 하는데, PowerShell에서 받은 종료 코드가 스크립트 자체가 반환한 종료 코드와 같다면 정말 좋겠습니다.안타깝게도 아래와 같이 스크립트가 0을 반환하면 PowerShell이 0을 반환하고 0이 아닌 값을 반환하면 1을 반환합니다.

PS C:\test> cat foo.ps1
exit 42
PS C:\test> ./foo.ps1
PS C:\test> echo $lastexitcode
42
PS C:\test> powershell -Command "exit 42"
PS C:\test> echo $lastexitcode
42
PS C:\test> powershell -Command "& ./foo.ps1"
PS C:\test> echo $lastexitcode
1
PS C:\test>

[환경] 사용하기::출구(42)는 거의 작동합니다.

PS C:\test> cat .\baz.ps1
[Environment]::Exit(42)
PS C:\test> powershell -Command "& ./baz.ps1"
PS C:\test> echo $lastexitcode
42
PS C:\test>

스크립트가 상호작용적으로 실행될 때 전체 셸을 빠져나간다는 점을 제외하고는 말입니다.좋은 의견이라도 있나?

보내주시는 부분을 보시면.-Command대본대로라면 절대로 작동하지 않을 겁니다실행 중인 스크립트.foo.ps1스크립트에는 종료할 호출이 없으므로 종료 코드를 반환하지 않습니다.

종료 코드를 반환하면 원하는 대로 처리됩니다.또한 에서 변경합니다."로.',그렇지않으면$lastexitcode문자열을 PowerShell에서 실행하면 두 번째 PowerShell에 문자열을 '전송'하기 전에 해결됩니다.

PS C:\test> powershell -Command './foo.ps1; exit $LASTEXITCODE'
PS C:\test> echo $lastexitcode
42

PS: 또한 확인해 보십시오.-File스크립트를 실행하려는 경우 parameter.하지만 그렇지 않다는 것도 알고 있습니다.return 1다음과 같이 종료 오류가 있는 경우-Command그렇습니다. 마지막 주제에 대해서는 여기를 참고하세요.

PS C:\test> powershell -File './foo.ps1'
PS C:\test> echo $lastexitcode
42

주의 사항: PowerShell 스크립트가 65535보다 높은 종료 코드를 반환할 경우 롤오버:

$exitCode = 65536
Exit $exitCode

다음 CMD가 위의 PS1 스크립트를 호출하면 %error level%인 0이 됩니다.

Powershell.exe "& 'MyPowershellScript.ps1' "; exit $LASTEXITCODE
SET ERR=%ERRORLEVEL%

종료 코드가 65537이면 %error level% 1 등이 됩니다.

한편 CMD가 다른 CMD를 호출할 때 하위 스크립트가 65535보다 높은 오류 수준을 반환하면 정상적으로 통과됩니다.

Cmd /c exit 86666

CMD는 예상대로 %error level%인 86666을 반환합니다.

이 모든 것에 주의해야 합니다.지금 이런 일이 뚜렷한 이유 없이 오락가락하고 있습니다.

어떻게 대본을 대화식으로 부르십니까?

이것을 시도해 보았는데 잘 되는 것 같으나, 파워쉘이 아닌 DOS 프롬프트에서 호출합니다.

C:\Temp>type foo.ps1
exit 42


C:\Temp>powershell -noprofile -nologo -noninteractive -executionpolicy Bypass -file .\foo.ps1

C:\Temp>echo %errorlevel%
42

c:\Temp>

언급URL : https://stackoverflow.com/questions/18410956/commands-exit-code-is-not-the-same-as-a-scripts-exit-code

반응형