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.
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.
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.