Behandeln von PowerShell-Fehlern wie ein Boss mit diesen Tipps
Wenn Sie zum ersten Mal mit dem Scripting in PowerShell beginnen, kann es eine Versuchung sein, eine Reihe von Befehlen zusammenzufassen, die Ihre Windows Admin-Fähigkeiten verbessern. Powershell-Cmdlets, die Ihre Windows Admin-Fähigkeiten verbessern. Powershell ist gleichwertige Befehlszeilen-Tool und Skriptsprache. Sie haben die Möglichkeit, Ihren Computer mit denselben Befehlen zu automatisieren, die Sie zur Verwaltung des Computers verwenden. Weiterlesen . Wenn Ihr Skript jedoch fehlschlägt, wissen Sie nicht, wo Sie mit der Problembehandlung beginnen sollen. Um zu vermeiden, dass Sie Zeit darauf verwenden, zu raten, warum Ihr Skript fehlgeschlagen ist, sollten Sie die Fehlerbehandlung verwenden.
Die PowerShell-Fehlerbehandlung umfasst vier Teile: den Parameter Error Action, Try / Catch-Blöcke, den Parameter Error Variable und die Protokollierung.
PowerShell-Fehler bei der einfachen Handhabung
Das erste Mal, wenn Sie Fehler behandeln möchten, ist, wenn etwas das Skript in seinen Spuren stoppt. Wenn der Fehler Ihre späteren Schritte nicht beeinflusst, sollten Sie ihn am besten einfach überspringen und fortfahren.
Andererseits ist nicht immer klar, wann ein bestimmtes Cmdlet einen Beendigungsfehler auslöst. Einige Cmdlets geben einen Fehler zurück, stoppen jedoch Ihr Skript nicht. Sie können dann warten, bis Ihr Skript fertiggestellt ist, während es Unsinn ausgibt.
Dies ist, wo die -ErrorAction Parameter kommt in. Sie verwenden dies, um ein Cmdlet zu zwingen, den Fehler so zu behandeln, wie Sie es möchten. Wenn Sie ein vorhandenes Skript ändern Steigern Sie Ihre Produktivität mit Windows PowerShell-Skripts Steigern Sie Ihre Produktivität mit Windows PowerShell-Skripts Was wäre, wenn Sie die Produktivität von Linux auf Windows übertragen könnten? Die meisten Linux-Distributionen werden mit der leistungsstarken Bash-Shell geliefert. PowerShell ist ein ebenso leistungsfähiges Terminal für Windows. Weitere Informationen hängen Sie am Ende der Cmdlet-Zeile an.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop
Natürlich, wenn Sie das verwenden Get-ChildItem Cmdlet allein, der Fehler tut nicht viel für Sie. Wenn Sie jedoch etwas mit den Daten tun möchten, ist es ratsam, das Skript zu stoppen, damit Sie wissen, dass die Suche fehlgeschlagen ist und warum. Wenn Sie mehrere Suchvorgänge durchführen, ändern Sie alternativ den Parameter von Halt zu Still weiter, Das Skript wird also fortgesetzt, wenn eine Suche fehlschlägt. Wenn Sie sehen möchten, was der Fehler ist, können Sie verwenden Fortsetzen stattdessen als Parameter.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction SilentlyContinue
Wenn Sie lieber die Möglichkeit haben möchten, zu kontrollieren, was bei jeder Ausführung des Skripts geschieht, können Sie es ändern Anfragen. Wenn Ihr Cmdlet einen Haken trifft, gibt es Optionen: Ja, Ja für alle, Befehl anhalten, Anhalten oder Hilfe.
Diese Option ist etwas flexibler, bedeutet jedoch, dass das Skript aufgrund von Fehlern auf Ihre Eingabe wartet. Das ist vielleicht nicht etwas, was Sie wollen, wenn Sie über Nacht einen langen Prozess ausführen.
Fehler beim Umgang mit der Programmierweise
Das ErrorAction Parameter behebt Ihre Fehler unkompliziert. Wenn Sie jedoch ein bisschen mehr Kontrolle über Fehler suchen, hat PowerShell Sie trotzdem abgedeckt. Verwenden Versuchen Sie / Catch, Das Skript kann jetzt verzweigt werden, wenn Cmdlets einen Fehler zurückgeben.
Wie der Name schon sagt, Versuchen Sie / Catch besteht aus zwei Teilen. (Es gibt technisch eine dritte, aber wir werden gleich darauf zugreifen.) Die erste ist die Versuchen Sektion. Sie werden in diesem Abschnitt Ihren normalen Code ausführen. Sie werden immer noch die verwenden -ErrorAction Parameter, kann aber nur als eingestellt werden Halt. Diese Markierung stellt sicher, dass Ihr Cmdlet das auslöst Fang-Auch wenn es keinen Abbruchfehler gibt.
Get-Process "Cortana" -ErrorAction Stop versuchen
Try kann auch verhindern, dass andere Cmdlets ausgeführt werden, wenn die Suche fehlschlägt. In diesem Fall, wenn Sie das senden Get-Process Ergebnisse zu Stop-Prozess, Eine fehlgeschlagene Suche verhindert, dass das zweite Cmdlet ausgeführt wird.
Nun, nachdem Sie einen try-Block von Cmdlets erstellt haben, was möchten Sie nun tun, wenn er fehlschlägt? Verwendung der Fang Hälfte, Sie werden das definieren.
Catch Write-Host "Prozess nicht gefunden"
Wie bei der ErrorAction Parameter, wenn Sie etwas komplexer machen 3 Clevere PowerShell-Funktionen nach dem Upgrade auf Windows 10 3 Clevere PowerShell-Funktionen nach dem Upgrade auf Windows 10 Windows 10 bringt uns eine neue PowerShell, im Wesentlichen eine Eingabeaufforderung für Steroide. In diesem Artikel erfahren Sie, wie Sie das ansonsten Unmögliche mit PowerShell erledigen können. Und es ist einfacher als Sie denken! Weiterlesen Fang ist nützlich für mehr als nur einen Klartextfehler. (Im obigen Beispiel wird der Fehler erzwungen, indem der App-Name und nicht der Prozessname verwendet wird.) Stellen Sie also sicher, dass Sie mit der Versuchen blockieren, um eine Suche / Aktion zu erstellen, die Sie benötigen. Du kannst den ... benutzen Fang Blockieren Sie Ihr Skript, um Sie per E-Mail zu benachrichtigen, falls es fehlschlägt.
Der dritte Teil ist praktisch, wenn Sie möchten, dass etwas ausgeführt wird, unabhängig davon, ob Ihr Cmdlet erfolgreich ist oder nicht. Dazu können Sie die Endlich Block. Sie fügen dies nach Try and Catch hinzu und protokollieren, wenn ein Abschnitt Ihres Skripts endet.
Die Fehlervariable und Protokollierung
Ihr Skript steuert jetzt, wie Fehler behandelt werden und wie sie darauf reagieren. Sie können es als geplante Aufgabe verwenden oder zumindest ausführen, wenn Sie sich nicht an Ihrem Schreibtisch befinden. 5 Gründe für die Verwendung von PowerShell anstelle von Batch-Skripting 5 Gründe für die Verwendung von PowerShell anstelle von Batch-Skripting Wenn Sie PowerShell verwenden, erhalten Sie sie überquerte die Eingabeaufforderung mit Batch Scripting, fügte einige zusätzliche Funktionen hinzu und trat mehrere Kerben ein. Hier sind einige Gründe, warum Sie es versuchen sollten. Weiterlesen . Wie können Sie jedoch ein fehlgeschlagenes Skript untersuchen? Mit dem -ErrorVariable Parameter Die Fehler Ihres Cmdlets schreiben in eine benutzerdefinierte Variable. Dies ist eine Alternative zum System $ Fehler Variable, die alle Fehler der aktuellen Sitzung enthält.
Ihr Cmdlet muss etwas länger werden. Definieren Sie zunächst eine Variable $ SearchError wird für das Beispiel tun. Wenn du anrufst SearchError in dem ErrorVariable Parmeter, du benutzt kein Dollarzeichen. Obwohl Sie eine Variable aufrufen, die Sie erstellt haben, wird sie aufgrund der Funktionsweise des Parameters ohne das Dollarzeichen aufgerufen. Fügen Sie diese dann am Ende der Zeile hinzu.
Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Continue -ErrorVariable SearchError
Wenn Sie eine hinzufügen + Vor dem Variablennamen können Sie die Variable hinzufügen, anstatt sie direkt zu ersetzen. Dadurch erhalten Sie dasselbe Verhalten wie die globale Fehlervariable. Stattdessen können Sie diese Ausgabe und verwenden Versuchen Sie / Catch Benutzerdefinierte Ausgabe schreiben und mit Zeitstempel versehen.
Erstellen Sie eine Textdatei, nachdem Sie die Fehlervariable festgelegt haben. Mach das mit dem Neuer Gegenstand Cmdlet. Möglicherweise möchten Sie das verwenden Anfragen Option für die ErrorAction Parameter. Dadurch können Sie ein vorhandenes Protokoll hinzufügen, wenn die Neuer Gegenstand Cmdlet schlägt fehl.
$ SearchLog = New-Item "~ \ SearchLog.txt" -Typdatei -ErrorAction Inquire
Jetzt, wenn Sie Ihre bauen Versuchen Sie / Catch Block können Sie die Fang in eine Textdatei einloggen. Sie verwenden Verabredung bekommen um den Zeitstempel zu erstellen. Die Formatierung kann schwierig sein, kopieren Sie diese also aus dem Beispiel.
Versuchen Sie Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError Catch Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-yy- hh_mm_ss) Dateien nicht gefunden, Fehler zurückgegeben: $ SearchError "
Wiederholen Sie diesen Vorgang nach Bedarf für alle Cmdlets. 15 Erweiterte Aufgaben PowerShell kann in Windows 10 verarbeitet werden 15 Erweiterte Aufgaben PowerShell kann in Windows 10 behandelt werden PowerShell ähnelt der Eingabeaufforderung, ist jedoch besser geeignet. Es ist ein leistungsfähiges Systemverwaltungswerkzeug. Wir haben 15 einfache und komplexe Aufgaben zusammengestellt, die von der Magie der PowerShell profitieren. Lesen Sie mehr, und Sie haben jetzt ein schönes Protokoll aller Fehler. Wenn Sie erfolgreich gelaufene Dinge nachverfolgen möchten, können Sie ein ähnliches hinzufügen Inhalt hinzufügen am Ende von Versuchen Block. Diese Protokollierung wird nur ausgeführt, wenn Sie Versuchen Cmdlet ist erfolgreich. Sie können dann Ihre Fehler und Erfolge mit Zeitstempeln protokollieren. Durch die Protokollierung erfahren Sie jetzt alles, was Ihr Skript getan hat, Erfolg oder Misserfolg.
Die Macht des Codes
Verwenden von PowerShell in der Befehlszeile Eingabeaufforderung im Vergleich zu Windows PowerShell: Was ist der Unterschied? Eingabeaufforderung im Vergleich zu Windows PowerShell: Was ist der Unterschied? Windows-Benutzer können ohne die Eingabeaufforderung oder die PowerShell auskommen. Aber mit Windows 10 und neuen Funktionen um die Ecke, ist es vielleicht an der Zeit, dass wir etwas gelernt haben. Mehr lesen ist eine leistungsstarke Methode zur Verwaltung Ihres Systems. Sie können dieselben Befehle so zusammenfassen, dass eine leistungsstarke Automatisierung möglich ist. Eine ordnungsgemäße Fehlerbehandlung ist erforderlich, um sicherzustellen, dass Ihre Skripts nur das ausführen, was Sie möchten. Wenn Sie alles protokollieren, können Sie bei der Fehlerbehebung Zeit sparen.
Gibt es eine Zeit, in der die Fehlerbehandlung Ihren Speck rettete? Gibt es ein PowerShell-Skript, das eine bessere Fehlerbehandlung ermöglicht? Was ist dein nächstes PowerShell-Projekt? Lass es uns in den Kommentaren wissen.
Erfahren Sie mehr über: PowerShell.