Как установить код выхода при возникновении исключения
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
Как установить правильный код выхода при создании исключения?
Ответы
Ответ 1
Нет. Когда вы делаете исключение, вы ожидаете, что кто-то его обработает. Чтобы кто-то мог прекратить выполнение и установить код выхода. Например:
try {
& ".\MyThrow.ps1"
} catch {
exit 1
}
Если вам нечего поймать, вы не должны бросать его в первую очередь, но сразу же выходите (с правильным кодом выхода).
Ответ 2
Можно установить код завершения и выдать ошибку, используя System.Environment:
# set final exit code
[System.Environment]::ExitCode = 1
# throw unhanded exception to terminate script
throw "test"
Ответ 3
Запуск mythrow.ps1 внутри powershell установит $? в false, и добавит к массиву объекта $ error. Запуск его с другим процессом powershell установит $ lastexitcode в 1.
PS C:\> powershell mythrow.ps1
PS C:\> $lastexitcode
1