Interpretieren von Fehleraktionen für Windows PowerShell-Befehle

Abgeschlossen

Wenn ein PowerShell-Befehl einen Fehler generiert, kann dieser Fehler eine von zwei Typen sein, entweder ein Fehler mit Abbruch oder ein Fehler ohne Abbruch. Ein Abbruchfehler tritt auf, wenn Windows PowerShell bestimmt, dass die Verarbeitung nach dem Fehler nicht fortgesetzt werden kann, und der Befehl beendet wird. Ein Fehler ohne Abbruch tritt auf, wenn Windows PowerShell bestimmt, dass die Verarbeitung nach dem Fehler fortgesetzt werden kann. Wenn ein Fehler ohne Abbruch auftritt, wird das ausgeführte Skript oder die ausgeführte Pipeline fortgesetzt. Fehler ohne Abbruch sind häufiger als Fehler mit Abbruch.

Betrachten Sie den folgenden Befehl:

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1

Wenn Sie davon ausgehen, dass der Computer LON-SVR1 nicht im Netzwerk verfügbar ist, generiert Get-WmiObject einen Fehler, wenn es versucht, diesen Computer abzufragen. Der Befehl kann jedoch mit dem nächsten Computer fortfahren, LON-DC1. Daher handelt es sich um einen Fehler ohne Abbruch.

$ErrorActionPreference

Windows PowerShell verfügt über eine integrierte globale Variable namens $ErrorActionPreference. Wenn ein Befehl einen Fehler ohne Abbruch generiert, überprüft der Befehl diese Variable, um zu entscheiden, was er tun soll. Für die Variable ist einer der folgenden vier Werte möglich:

  • Fortsetzen ist der Standardwert, und er weist den Befehl an, eine Fehlermeldung anzuzeigen und die Ausführung fortzusetzen.
  • SilentlyContinue weist den Befehl an, keine Fehlermeldung anzuzeigen, die Ausführung aber fortzusetzen.
  • Inquire weist den Befehl an, eine Eingabeaufforderung anzuzeigen und den Benutzer zu fragen, was zu tun ist.
  • Stop weist den Befehl an, den Fehler als Abbruch zu behandeln und die Ausführung zu beenden.

Verwenden Sie die folgende Syntax, um die Variable $ErrorActionPreference festzulegen:

$ErrorActionPreference = 'Inquire'

Hinweis

Gehen Sie bei der Verwendung von SilentlyContinue für $ErrorActionPreference umsichtig vor. Möglicherweise denken Sie, dass dies das Skript benutzerfreundlicher macht, es kann aber die Problembehandlung erschweren.

Wenn Sie beabsichtigen, einen Fehler in Ihrem Skript abzufangen, damit Sie den Fehler verwalten können, müssen Befehle die Aktion Stop (Beenden) verwenden. Nur Fehler mit Abbruch können abgefangen und verwaltet werden.

-ErrorAction-Parameter

Alle Windows PowerShell-Befehle weisen den Parameter –ErrorAction auf. Dieser Parameter hat den Alias –EA. Der Parameter akzeptiert dieselben Werte wie $ErrorActionPreference, und er überschreibt die Variable für diesen Befehl. Wenn Sie erwarten, dass in einem Befehl ein Fehler auftritt, verwenden Sie –ErrorAction, um die Fehleraktion dieses Befehls auf Stop festzulegen. Dadurch können Sie den Fehler für diesen Befehl abfangen und verwalten, aber alle anderen Befehle verwenden weiterhin die Aktion in $ErrorActionPreference. Ein Beispiel ist:

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1 -ErrorAction Stop

Die einzige Situation, in der Sie $ErrorActionPreference ändern, besteht, wenn Sie einen Fehler außerhalb eines Windows PowerShell-Befehls erwarten, z. B. beim Ausführen einer Methode wie der folgenden:

Get-Process –Name Notepad | ForEach-Object { $PSItem.Kill() }

In diesem Beispiel generiert die Kill()-Methode möglicherweise einen Fehler. Da es sich jedoch nicht um einen Windows PowerShell-Befehl handelt, verfügt er nicht über den Parameter –ErrorAction. Stattdessen würden Sie $ErrorActionPreference vor dem Ausführen der Methode auf Stop festlegen und dann die Variable nach dem Ausführen der Methode zurück auf Continue (Fortsetzen) setzen.