Suche…


Einführung

In diesem Thema werden Fehlertypen und Fehlerbehandlung in PowerShell beschrieben.

Fehlertypen

Ein Fehler ist ein Fehler, man könnte sich fragen, wie es Typen geben könnte. Nun, bei Powershell fällt der Fehler weitgehend in zwei Kriterien,

  • Fehler beim Beenden
  • Nicht beendender Fehler

Wie der Name schon sagt, wird durch Beendigungsfehler die Ausführung beendet, und bei einem nicht beendenden Fehler wird die Ausführung mit der nächsten Anweisung fortgesetzt.

Dies ist wahr, vorausgesetzt, der $ ErrorActionPreference- Wert ist default (Continue). $ ErrorActionPreference ist eine Prefrence-Variable, die Powershell mitteilt, was im Falle eines "Non-Terminating" -Fehlers zu tun ist.

Fehler beim Beenden

Ein Beendigungsfehler kann wie unten beschrieben mit einem typischen Try-Catch behandelt werden

Try
{
    Write-Host "Attempting Divide By Zero"
    1/0
}
Catch
{
    Write-Host "A Terminating Error: Divide by Zero Caught!" 
}

Das obige Snippet wird ausgeführt und der Fehler wird durch den catch-Block aufgefangen.

Nicht beendender Fehler

Ein nicht terminierender Fehler in der anderen Hand wird jedoch standardmäßig nicht im catch-Block erfasst. Der Grund dafür ist ein nicht beendeter Fehler, der nicht als kritischer Fehler angesehen wird.

Try
{
    Stop-Process -Id 123456
}
Catch
{
    Write-Host "Non-Terminating Error: Invalid Process ID"
}

Wenn Sie die Zeile oberhalb der Zeile ausführen, wird die Ausgabe nicht von catch block abgerufen, da der Fehler nicht als kritisch angesehen wird und die Ausführung einfach mit dem nächsten Befehl fortgesetzt wird. Der Fehler wird jedoch in der Konsole angezeigt. Um einen nicht beendenden Fehler zu behandeln, müssen Sie einfach die Fehlerpräferenz ändern.

Try
{
    Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
    "Non-Terminating Error: Invalid Process ID"
}

Mit der aktualisierten Voreinstellung "Fehler" wird dieser Fehler nun als Beendigungsfehler betrachtet und im catch-Block abgefangen.

Abbruch- und nicht beendende Fehler aufrufen:

Das Cmdlet Write-Error schreibt den Fehler einfach in das aufrufende Hostprogramm. Es stoppt nicht die Hinrichtung. Where als Wurf gibt Ihnen einen Abbruchfehler und stoppt die Ausführung

Write-host "Going to try a non terminating Error "
Write-Error "Non terminating" 
Write-host "Going to try a terminating Error "
throw "Terminating Error " 
Write-host "This Line wont be displayed" 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow