programing

예외를 던질 때 종료 코드를 설정하는 방법

starjava 2023. 9. 4. 19:28
반응형

예외를 던질 때 종료 코드를 설정하는 방법

MyScript.ps1:

exit 1

MyThrow.ps1:

throw "test"

PowerShell에서 실행:

& ".\MyScript.ps1"
Write-Host $LastExitCode # Outputs 1

Clear-Variable LastExitCode

& ".\MyThrow.ps1"
Write-Host $LastExitCode # Outputs nothing

예외를 던질 때 올바른 종료 코드를 설정하려면 어떻게 해야 합니까?

주의:

Powershell 4 이하 사용:

예외가 발생하면 종료 코드가 0으로 유지됩니다(불행히도).

Powershell 5 이상 사용 시:

예외가 발생할 경우 종료 코드 기본값은 1입니다.

넌 아냐.예외를 던질 때는 누군가가 처리할 것으로 예상됩니다.누군가가 실행을 종료하고 종료 코드를 설정할 것입니다.예를 들어:

try {
  & ".\MyThrow.ps1"
} catch {
  exit 1
}

예외를 발견할 수 있는 내용이 없으면 처음부터 예외를 던지지 말고 바로 종료해야 합니다(적절한 종료 코드를 사용하여).

사실 던지기 전에 코드를 설정할 수도 있습니다.

스크립트의 내용:던지기.ps1

exit 222
throw "test"

출력:

PS C:\> .\Throw.ps1
PS C:\> $LASTEXITCODE
222

다음과 같이 실행할 경우:

powershell .\Throw.ps1

출력은 다음과 같습니다.

PS C:\> powershell .\Throw.ps1
PS C:\> $LASTEXITCODE
1

하지만 여기서 중요한 것은 파워셸 종료 코드가 0 또는 1이어야 한다는 것입니다. 다른 코드는 결국 1의 결과를 제공합니다.

스크립트를 실행한 후 $?를 시도하면 참인지 거짓인지에 따라 결과가 달라집니다.exit 0 --> true,exit 1 --> false

다음은 예입니다.

스크립트 내용:던지기_1.ps1

exit 1
throw "test"

출력:

PS C:\> .\Throw_1.ps1
PS C:\> $?
False

스크립트 내용:던지기_0.ps1

exit 0
throw "test"

출력:

PS C:\> .\Throw_0.ps1
PS C:\> $?
True

보다시피 이것은 여러분이 필요로 하거나 성취하고자 하는 것입니다.

powershell 내부에서 mythrow.ps1을 실행하면 $?가 false로 설정되고 $error 개체 배열에 추가됩니다.다른 powershell 프로세스와 함께 실행하면 $last exitcode가 1로 설정됩니다.

PS C:\> powershell mythrow.ps1
PS C:\> $lastexitcode
1

언급URL : https://stackoverflow.com/questions/28724388/how-to-set-the-exit-code-when-throwing-an-exception

반응형