Is there an elegant Powershell script setting that would exit the running Powershell script (or shell instance) if a program fails?
I'm imagining something like Bash feature set -o errexit
(or set -e
) but for Powershell. In that feature, if a program in the bash script fails (process return code was not 0
) then the bash shell instance immediately exits.
In powershell, the script could expliclty check $LastExitCode
or $?
(if($?){exit}
). However, that becomes cumbersome to do for every program call. Maybe powershell has a feature to automatically check and react to program return codes?
Using made-up idiom Set-Powershell-Auto-Exit
Set-Powershell-Auto-Exit "ProgramReturnCode" # what should this be?
& "program.exe" --fail # this program fails with an error code
& "foo.exe" # this never runs because script has exited
Unfortunately, as of PowerShell (Core) 7.3.x, PowerShell offers no way to automatically exit a script when an external program reports a nonzero exit code.
PSNativeCommandErrorActionPreference
is available in v7.3 and preview versions of v7.4, which, if the $PSNativeCommandArgumentPassing
preference variable is set to $true
, emits a PowerShell error in response to an external program's nonzero exit code, which is therefore subject to the value of the $ErrorActionPreference
preference variable; caveat:
For PowerShell-native commands only (cmdlets, scripts, functions), $ErrorActionPreference = 'Stop'
can be used, which results in exit code 1
.
If you need more control over what exit code is reported, see this answer.
For an overview of how PowerShell reports exit codes to the outside world, see this answer.
For external programs, you must test for $LASTEXITCODE -eq 0
explicitly and take action based on that, but as a workaround you can use a helper function for all external-program invocations, as shown in this answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With