Exit Code Handling with PowerShell

The exit code of a PowerShell script is usually expected as the result of the execution of the script. However, the program powershell.exe returns the exit code of the execution of the powershell.exe itself - and this in most cases 0.

To retrieve the effective exit code of the script, that script has to be terminated with an exit() function and as parameter the variable $lastexitcode (or any other value/variable for the exit code).

The example below shows how it works:

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <job title="How to get the exit code from a powershell script"
     name="PowerShellExitCode">
    <script language="shell">
        <![CDATA[
 powershell.exe -noprofile -command "write-output test; exit 123 "
 echo %errorlevel%
 exit %errorlevel%
        ]]>
     </script>
     <run_time/>
 </job>

 

The result of this job is visible in the log file:

 [debug9] SCHEDULER-918  state=running_process (never)
  [info]   C:\Program Files (x86)\Scheduler>powershell -noprofile -command "write-output test; exit 123 " 
 [info]   test 
 [info]   C:\Program Files (x86)\Scheduler>echo 123  
 [info]   123 
 [info]   C:\Program Files (x86)\Scheduler>exit 123 
 [ERROR]  SCHEDULER-280  Process terminated with exit code 123 (0x7B)

The statement exit %errorlevel% passes the exit code to JobScheduler. If this statement is missing then JobScheduler will not know about the exit code and will assume that it is zero (0).

See also