When you launch a PowerShell script from outside PowerShell, you may want to return an exit code to the caller so that the caller knows if your script ran ok. You can send back an exit code by using the statement exit xy where “xy” is a numeric value.
Here is a sample script to test drive this:
param($code=99) exit $code
Save this in a .ps1 script file, then launch cmd.exe, and run your script:
Powershell.exe –noprofile –file “pathtoscript.ps1” 1234 Echo %ERRORLEVEL%
This returns 1234 (or whatever code you submitted to your script when you called it). The reason why so many people have trouble with returning exit codes is that they miss the –file parameter:
Powershell.exe –noprofile “pathtoscript.ps1” 1234 Echo %ERRORLEVEL%
Without –file, powershell.exe returns either 0 or 1. That’s because now your code is interpreted as a command, and when the command returns an exit code other than 0, PowerShell assumes it failed. It then returns its own exit code, which is always 0 (command ran fine) or 1 (command failed).