Windows PowerShell Exit Codes: wie nutzen?

Als kurze Ergänzung zum MVP Tag und für alle PowerShell Fans: Windows PowerShell bietet (wie andere Skriptsprachen auch) die Möglichkeit, eigene Exit-Codes zu definieren. In PowerShell schreibt man dazu z.B. einfach den Befehl Exit 123, um den Rückgabewert 123 zu übergeben.

Ist dies jedoch in einem Skript eingebettet und ruft man das Skript von einer Batch-Datei auf, so lautet bekommt man nicht diesen Wert. Lautet das Skript z.B. Test-exitcode.ps1 mit Inhalt exit 123, dann erzeugt die Zeile

c:\> PowerShell -command "& { c:\test-exitcode }"

lediglich als Rückgabewert 0:

c:\> echo %errorlevel

0

Das liegt daran, dass der Rückgabewert hier von der PowerShell EXE kommt, welche erfolgreich beendet wurde und somit den Wert 0 generiert. Um den eigentlich gewünschten Wert 123 zu erhalten, muss man dies lediglich der PowerShell mitteilen:

C:\>powershell -command "& { c:\test-exitcode.ps1 ; exit $lastexitcode }"

C:\>echo %errorlevel%
123

So einfach ist das.