Frage Wie kann ich einen Fehler in Powershell ignorieren und weitermachen?


Ich versuche zu sehen, ob ein Prozess auf mehreren Servern läuft und formatiere ihn dann in einer Tabelle.

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

Das ist der einfache Teil - Wenn der Prozess nicht existiert oder wenn der Server nicht verfügbar ist, gibt Powershell einen großen hässlichen Fehler aus, verwirrt die Tabelle und geht nicht weiter. 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 hier zurecht? Wenn ich noch benachrichtigt werden möchte, wenn der Prozess nicht verfügbar ist oder läuft.


32
2017-11-30 08:32


Ursprung




Antworten:


Hinzufügen -ErrorAction SilentlyContinue zu deinem Befehl.

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 zu fangen. (EA ist ein Alias ​​für ErrorAction)

Sie können dann den Fehler in Ihrem Skript auswerten, indem Sie es sich ansehen $Err[0]


36
2017-11-30 09:53



Ich fürchte, das funktioniert nicht, wenn ich es nicht an der falschen Stelle stecke. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Select-Objekt Prozessname, Maschinenname - Jake
Fügen Sie es zu get-process oder werfen Sie einen Blick auf meine aktualisierte Antwort oben. - Bart De Vos


Kurze Antwort: Hinzufügen $ErrorActionPreference = 'SilentlyContinue' Am Anfang des Codes müssen Sie nicht hinzufügen -ErrorAction SilentlyContinue zu jedem Befehl

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


8
2018-04-12 05:44



Beachten Sie den Unterschied: 'Fortsetzen' (Standardeinstellung) setzt die Ausführung fort, schreibt aber Fehler auf die Konsole (die ich anscheinend loswerden möchte, wenn ich ihn richtig lese). 'SilentlyContinue' unterdrückt alle Fehlermeldungen vollständig. - Frederik Struck-Schøning
Tu das nicht # 17: Stumm die Fehler mit $ErrorActionPreference = ‘SilentlyContinue’ - JosefZ