Jak zignorować błąd w programie Powershell i pozwolić mu kontynuować?


42

Próbuję sprawdzić, czy proces działa na wielu serwerach, a następnie sformatować go w tabeli.

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

To łatwa część - gdy proces nie istnieje lub jeśli serwer jest niedostępny, PowerShell generuje duży brzydki błąd, psuje tabelę i nie kontynuuje. Przykład

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

Jak to obejść? Jeśli nadal chcę otrzymywać powiadomienia, jeśli proces nie jest dostępny lub działa.

Odpowiedzi:


46

Dodaj -ErrorAction SilentlyContinuedo swojego polecenia.

Jeśli nie jest to błąd, ale nieobsługiwany wyjątek, należy dodać -EV Err -EA SilentlyContinue, aby złapać wyjątek. ( EAjest pseudonimem dla ErrorAction)

Następnie możesz ocenić błąd w skrypcie, sprawdzając $Err[0]


Obawiam się, że to nie działa, chyba że przykleję go w niewłaściwym miejscu. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Select-Object processname, machinename
Jake

Dodaj go get-processlub spójrz na moją zaktualizowaną odpowiedź powyżej.
Bart De Vos,

13

Krótka odpowiedź: dodaj $ErrorActionPreference = 'SilentlyContinue'na początku kodu, więc nie musisz dodawać -ErrorAction SilentlyContinuedo każdego polecenia

Długa odpowiedź: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details


1
Zwróć uwagę na różnicę: „Kontynuuj” (ustawienie domyślne) kontynuuje wykonywanie, ale zapisuje błędy w konsoli (której op wydaje się chcieć pozbyć, jeśli poprawnie go odczytam). „SilentlyContinue” całkowicie pomija wszystkie komunikaty o błędach.
Frederik Struck-Schøning,


„Dodaj $ ErrorActionPreference = 'SilentlyContinue' na początku kodu” ---> To naprawdę pomogło, więc bardzo dziękuję za pomoc i udostępnienie jej w Internecie.
Nishant
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.