Zwei Arten von Fehlern

PowerShell unterscheidet grundsätzlich zwischen zwei Fehlerarten: Terminating Errors und Non-Terminating Errors. Der Unterschied bestimmt, ob dein Skript am Fehlerort abbricht oder weiter ausgeführt wird.

Non-Terminating Errors

Diese Fehler sind die am häufigsten auftretenden Fehler. Wenn ein Cmdlet (wie Get-Item oder Remove-Item) eine Datei nicht findet, erzeugt es einen solchen Fehler. Der Fehler wird rot auf dem Bildschirm ausgegeben, aber das Skript läuft danach normal weiter. Ein Standard-try/catch-Block fängt diese Fehler nicht ab.

PowerShell
Get-Item "C:\GibtEsNicht.txt"

Write-Output "Das Skript läuft trotzdem hier weiter!"

Terminating Errors

Dies sind schwerwiegende Fehler (z.B. Syntax-Fehler oder fehlende Rechte), die PowerShell daran hindern, den aktuellen Befehl oder gar das Skript weiter auszuführen. Ein solcher Fehler bricht die Ausführung sofort ab, kann aber mit try/catch abgefangen werden.

PowerShell
try { # Ein absichtlich geworfener terminating Error
    throw "Schwerer Systemfehler"
}
catch {
    Write-Output "Fehler abgefangen und das Skript darf dank catch weiterleben."
}

Das Verhalten anpassen

Damit ein Skript vorhersehbar auf jeden Fehler reagieren kann, erzwingt man oft mittels -ErrorAction Stop bei Cmdlets (oder pauschal über $ErrorActionPreference = 'Stop'), dass gewöhnliche Non-Terminating Errors zu Terminating Errors eskalieren.