How to set the exit code when throwing an exception
You don't. When you throw an exception you expect someone to handle it. That someone would be the one to terminate execution and set an exit code. For instance:
try {
& ".\MyThrow.ps1"
} catch {
exit 1
}
If there is nothing to catch your exception you shouldn't be throwing it in the first place, but exit right away (with a proper exit code).
Actually you can set the code also with throw, just put it before throw.
Contents of the script: Throw.ps1
exit 222
throw "test"
Output:
PS C:\> .\Throw.ps1
PS C:\> $LASTEXITCODE
222
If you run it like this:
powershell .\Throw.ps1
The output will be as follows:
PS C:\> powershell .\Throw.ps1
PS C:\> $LASTEXITCODE
1
But here is the thing, powershell exit codes should be either 0 or 1, anything else, finally will give you result of 1.
Another interesting thing to mention, if to try $? after you run the script,
if true or false, the result depends of what you want to put in there.
exit 0 --> true
, exit 1 --> false
Here it is an example:
Content of the script: Throw_1.ps1
exit 1
throw "test"
Output:
PS C:\> .\Throw_1.ps1
PS C:\> $?
False
Content of the script: Throw_0.ps1
exit 0
throw "test"
Output:
PS C:\> .\Throw_0.ps1
PS C:\> $?
True
As you can see it is just what you need or want to achieve.
Becareful:
With Powershell 4 and less:
When an exception is thrown, exit code remains at 0 (unfortunately)
With Powershell 5 and up:
When an exception is thrown, exit code defaults to 1