Was ist neu bei der PowerShell-Fehlerbehandlung?

Das Schlagen und Beheben von Fehlern ist ein unvermeidlicher Bestandteil der Arbeit mit Technologie, und PowerShell ist keine Ausnahme.

Niemand schreibt perfekten Code. Ihre Skripte weisen möglicherweise einen Fehler auf oder müssen berücksichtigen, wenn eine Ressource getrennt wird, ein Dienst auf ein Problem stößt oder eine Eingabedatei schlecht formatiert ist. Das Erlernen des Interpretierens einer Fehlermeldung, das Erkennen der Grundursache und das ordnungsgemäße Behandeln des Fehlers ist ein wichtiger Bestandteil der Arbeit mit PowerShell. Das Entwicklungsteam hinter der Open Source-Version von PowerShell 7 hat die PowerShell-Fehlerbehandlung sowohl beim Ausführen eines Skripts als auch beim Eingeben von Befehlen in eine Shell verbessert.

Dieser Artikel führt Sie in einem einfachen Skript durch die PowerShell-Fehlerbehandlung und führt einige neue Funktionen in PowerShell 7 ein, die den Prozess benutzerfreundlicher machen.

So finden Sie PowerShell 7

Stellen Sie zunächst sicher, dass PowerShell 7 installiert ist. Dies ist die neueste Hauptversion des Tools, das bis zur Veröffentlichung von Version 7 als PowerShell Core bezeichnet wurde. Microsoft unterstützt weiterhin die Windows PowerShell 5.1-Version, plant jedoch nicht, die neuen Funktionen bereitzustellen, die das Projektteam für Open Source PowerShell entwickelt .
PowerShell 7 ist für Windows, Mac und Linux verfügbar. Das letzte Version kann von der PowerShell GitHub-Seite installiert werden.
Unter Windows können Sie PowerShell 7 auch in der neuen Windows Terminal-Anwendung verwenden, die Verbesserungen gegenüber dem alten Windows-Konsolenhost bietet.

Fehlermeldungen in früheren PowerShell-Versionen

Ein häufiges Problem für Windows PowerShell 5.1-Neulinge und frühere PowerShell Core-Versionen ist, dass nicht klar ist, warum etwas schief geht.

Stellen Sie sich beispielsweise vor, Sie möchten eine Liste lokaler Benutzer in eine CSV-Datei exportieren, Ihr Skript enthält jedoch einen Tippfehler:

Get-LocalUser |= Export-Csv local_users.csv

Folgendes würden Sie sehen, wenn Sie das Skript ausführen:

PowerShell-Fehlermeldung
Vor der PowerShell 7-Version ist dies die Art der Fehlermeldung, die angezeigt wird, wenn ein Befehl einen Tippfehler enthält.

Der Fehlercode enthält wichtige Informationen – es gibt eine gleich Symbol, das nicht dazu gehört – aber es kann schwierig sein, es in der Wand aus rotem Text zu finden.

Eine langjährige Variable erhält einen neuen Zweck

Wussten Sie, dass PowerShell eine Voreinstellungsvariable namens hat? $ ErrorView? Vielleicht nicht, weil es bis jetzt nicht sehr nützlich war.
Das $ ErrorView Die Variable bestimmt, welche Informationen an die Konsole gesendet werden und wie sie formatiert werden, wenn ein Fehler auftritt. Die Nachricht kann variieren, wenn Sie eine Skriptdatei ausführen, anstatt einen Befehl in die Shell einzugeben.
In früheren Versionen von PowerShell $ ErrorView Standardeinstellung ist Normale Ansicht – Dies ist die Quelle der Wand aus rotem Text, die im vorherigen Screenshot zu sehen ist.
Das ändert sich mit PowerShell 7. Es gibt eine neue Option für $ ErrorView das ist jetzt die Standardeinstellung ConciseView.

Fehler werden in PowerShell 7 klarer formatiert

Wenn wir denselben Befehl mit dem Fehler in PowerShell 7 mit dem neuen Standard ausführen ConciseViewist die Fehlermeldung leichter zu verstehen.

ConciseView-Option
Das neue
ConciseView Option reduziert die Unordnung und hebt die Fehlerstelle mit einer anderen Farbe hervor.

Die neue PowerShell-Fehlerbehandlung hebt den Problembereich im Befehl mit einer anderen Farbe hervor und überlastet Sie nicht mit zu vielen Informationen.
Beheben wir den Tippfehler und fahren Sie mit dem Testen fort.

Kürzere Fehler in der Shell

Ein weiterer Fehler, der beim Schreiben in eine CSV auftreten kann, besteht darin, dass die Zieldatei gesperrt ist. Beispielsweise ist die Datei möglicherweise in Excel geöffnet.
Wenn Sie PowerShell als Shell verwenden, wird die neue Standardeinstellung verwendet ErrorView Jetzt erhalten Sie nur die Fehlermeldung ohne fremde Informationen. Sie können die Länge des Fehlers in Windows PowerShell 5.1 und seinen Versionen sehen Normale Ansicht unten.

Windows PowerShell-Fehlermeldung
Die Standardfehlermeldung in Windows PowerShell 5.1 enthält viele Informationen, jedoch keine nützliche.

Im Gegensatz dazu bietet die PowerShell-Fehlerbehandlung in der neuesten Version des Automatisierungstools eine prägnantere Meldung, wenn aufgrund des Problems ein Problem auftritt ConciseView Möglichkeit.

PowerShell 7-Fehlermeldung
Das
ConciseView Die Option bietet eine einfachere Fehlermeldung, wenn ein Problem mit einem Befehl auftritt.

Sie können viel einfacher erkennen, dass die Datei gesperrt ist, und über die Behebung des Problems nachdenken.

Erfahren Sie, wie Sie Fehleraufzeichnungen untersuchen

Wir haben gesehen, wie PowerShell 7 Fehlermeldungen verbessert, indem nur die benötigten Informationen strukturierter bereitgestellt werden. Aber was sollten Sie tun, wenn Sie tiefer graben müssen? Lassen Sie uns dies herausfinden, indem Sie diesen Fehler weiterhin als Beispiel verwenden: “Der Prozess kann nicht auf die Datei zugreifen … weil sie von einem anderen Prozess verwendet wird.”

Den Terror aus $ Error herausnehmen

Jedes Mal, wenn PowerShell auf einen Fehler stößt, wird dieser in das geschrieben $ Fehler automatische Variable. $ Fehler ist ein Array und der letzte Fehler ist $ Fehler[0].
Weitere Informationen zu Ihrem letzten Fehler in früheren Versionen von PowerShell finden Sie hier $ Fehler[0] mit Cmdlets wie Objekt auswählen und Format-Liste. Diese Art der Prüfung ist mühsam: Sie können jeweils nur eine Eigenschaft erweitern, und es ist leicht, wichtige verschachtelte Informationen zu übersehen, die in einer Handvoll Eigenschaften enthalten sind.
Schauen Sie sich zum Beispiel die Ausgabe des folgenden Befehls an.

$Error[0] | Select-Object *
$ Fehler automatische Variable
Das
$ Fehler Die automatische Variable in PowerShell vor Version 7 speicherte Fehler, war jedoch nicht flexibel genug, um die beteiligten Eigenschaften genauer zu betrachten.

Es gibt keine Möglichkeit zu wissen, dass eine Fülle wertvoller Daten unter den Eigenschaften lebt Ausnahme und InvocationInfo. Der nächste Abschnitt zeigt, wie Sie an diese Informationen gelangen.

Lernen, mit Get-Error zu erkunden

PowerShell 7 wird mit einem neuen Cmdlet namens geliefert Get-Error Auf diese Weise können Sie alle Informationen in einem PowerShell-Fehlerdatensatz abrufen.
Ohne Argumente ausführen, Get-Error Zeigt einfach den neuesten Fehler an, wie Sie im folgenden Screenshot sehen können.

Cmdlet-Ausgabe Get-Error
Das neue
Get-Error Mit dem Cmdlet in PowerShell 7 können Sie auf einfachere Weise weitere Informationen zu Fehlern abrufen.

Sie sehen sofort die Hierarchie nützlicher Objekte und Eigenschaften, die im Fehlerdatensatz verschachtelt sind. Zum Beispiel können Sie die sehen Ausnahme Eigentum ist kein Informationsspeicherauszug; Es enthält untergeordnete Eigenschaften, von denen einige ihre eigenen Kinder haben.
Wenn Sie die Fehlermeldung in Ihrem Code wiederverwenden möchten, um sie in eine Protokolldatei oder in die Ereignisanzeige zu schreiben, können Sie die Nachricht mit dem folgenden Befehl speichern:

$Error[0].Exception.Message

Verwenden Sie ErrorVariable, um Fehlerdatensätze zu speichern

Das Get-Error Das Cmdlet akzeptiert auch Fehlerdatensätze aus der Pipeline. Dies ist besonders praktisch, wenn Sie die verwenden -ErrorVariable Allgemeiner Parameter zum Speichern von Fehlern für eine spätere Überprüfung, den Sie mit dem folgenden Code ausführen können:

# +myErrors means "add error to $myErrors variable"
Get-LocalUser | Export-Csv local_users.csv -ErrorVariable +myErrors
# Inspect the errors with Get-Error
$myErrors | Get-Error

Durch die Nutzung Get-Errorkönnen Sie sehen, dass ein ErrorVariable hält Informationen etwas anders als das $ Fehler Variable. Die Fehlermeldung wird an mehreren Stellen angezeigt, am einfachsten in einer Eigenschaft mit dem Namen Botschaft, wie im folgenden Screenshot gezeigt.

ErrorVariable-Parameter
Verwendung der
ErrorVariable Der Parameter bietet eine flexiblere Möglichkeit, Fehler zu protokollieren, anstatt den zu verwenden
$ Fehler Variable, die jeden Fehler in einer Sitzung speichert.

Alles zusammenbringen

Du hast es jetzt benutzt Get-Error um Fehleraufzeichnungen zu überprüfen, sowohl aus Ihrem Shell-Verlauf als auch aus einem ErrorVariableund Sie haben gesehen, wie Sie auf eine Eigenschaft des Fehlers zugreifen können.
Der letzte Schritt besteht darin, alles zusammenzubinden, indem Sie die Eigenschaft in Ihrem Skript wiederverwenden. In diesem Beispiel werden Fehler in gespeichert $ myErrors und schreibt alle Fehlermeldungen in eine Datei:

Get-LocalUser | Export-Csv local_users.csv -ErrorVariable +myErrors
if ($myErrors) {
    $myErrors.Message | Out-File errors.log -Append
}

Wenn Sie sich ernsthaft mit Skripten und Automatisierung befassen möchten, sollten Sie die PowerShell-Fehlerbehandlung untersuchen, da sie in Version 7 erheblich verbessert wurde. Es ist besonders hilfreich, Fehler in einer Variablen zu speichern, um sie später zu untersuchen oder an einen Kollegen weiterzugeben.

Similar Posts

Leave a Reply