Wie kann ich einen Fehler in Powershell ignorieren und fortsetzen?


42

Ich versuche festzustellen, ob ein Prozess auf mehreren Servern ausgeführt wird, und formatiere ihn dann in eine Tabelle.

get-process -ComputerName server1,server2,server3 -name explorer | Select-Object processname,machinename

Das ist der einfache Teil - Wenn der Prozess nicht existiert oder der Server nicht verfügbar ist, gibt Powershell einen großen hässlichen Fehler aus, verunstaltet die Tabelle und fährt nicht fort. Beispiel

Get-Process : Couldn't connect to remote machine.At line:1 char:12 + get-process <<<<  -ComputerName server1,server2,server3 -name explorer | format-table processname,machinename
+ CategoryInfo          : NotSpecified: (:) [Get-Process], InvalidOperatio   nException    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Power   Shell.Commands.GetProcessCommand

Wie komme ich darum herum? Wenn ich trotzdem benachrichtigt werden möchte, wenn der Prozess nicht verfügbar ist oder ausgeführt wird.

Antworten:


46

Fügen Sie -ErrorAction SilentlyContinueIhrem Befehl hinzu.

Wenn es sich nicht um einen Fehler, sondern um eine nicht behandelte Ausnahme handelt, sollten Sie hinzufügen -EV Err -EA SilentlyContinue, um die Ausnahme abzufangen . ( EAist ein Alias ​​für ErrorAction)

Sie können dann den Fehler in Ihrem Skript auswerten, indem Sie einen Blick darauf werfen $Err[0]


Ich fürchte, das funktioniert nur, wenn ich es an der falschen Stelle stecke. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Select-Object-Prozessname, Maschinenname
Jake

Fügen Sie es get-processmeiner aktualisierten Antwort oben hinzu oder werfen Sie einen Blick darauf.
Bart De Vos

13

Kurze Antwort: Fügen Sie $ErrorActionPreference = 'SilentlyContinue'am Anfang Ihres Codes hinzu, damit Sie nicht -ErrorAction SilentlyContinuejeden Befehl hinzufügen müssen

Lange Antwort: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details


1
Beachten Sie den Unterschied: 'Continue' (Standardeinstellung) setzt die Ausführung fort, schreibt aber Fehler in die Konsole (welche op loszuwerden scheint, wenn ich sie richtig lese). 'SilentlyContinue' unterdrückt alle Fehlermeldungen vollständig.
Frederik Struck-Schøning


"Fügen Sie $ ErrorActionPreference = 'SilentlyContinue' am Anfang Ihres Codes hinzu" ---> Dies hat wirklich geholfen. Vielen Dank für Ihre Hilfe und die Bereitstellung im Internet.
Nishant
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.