Как установить код выхода при возникновении исключения

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