it-swarm.com.de

Wie ignoriere ich einen Fehler in Powershell und lasse ihn fortfahren?

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 wenn der Server nicht verfügbar ist, gibt Powershell einen großen hässlichen Fehler aus, bringt die Tabelle durcheinander 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.

47
Jake

Fügen Sie Ihrem Befehl -ErrorAction SilentlyContinue Hinzu.

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

Sie können den Fehler in Ihrem Skript dann anhand von $Err[0] Auswerten.

52
Bart De Vos

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

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

15
Tinman