Cum să ignori o eroare în Powershell și să o lași să continue? (Administrarea sistemului, Powershell)

Jake a intrebat.

Încerc să văd dacă un proces rulează pe mai multe servere și apoi să îl formatez într-un tabel.

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

Aceasta este partea ușoară – Când procesul nu există sau dacă serverul nu este disponibil, powershell emite o eroare mare și urâtă, încurcă tabelul și nu continuă. Exemplu

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

Cum pot să ocolesc acest lucru? În cazul în care aș dori totuși să fiu notificat dacă procesul nu este disponibil sau nu rulează.

2 răspunsuri
Bart De Vos

Adăugați -ErrorAction SilentlyContinue la comanda dvs.

Atunci când nu este o eroare, ci o Excepție netransmisă, ar trebui să adăugați -EV Err -EA SilentlyContinue, , pentru a prinde excepția. (EA este un alias pentru ErrorAction)

Apoi puteți evalua eroarea în scriptul dumneavoastră, aruncând o privire la $Err[0]

Comentarii

  • Mi-e teamă că nu funcționează, dacă nu cumva am băgat-o în locul greșit. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Select-Object processname,machinename –  > Por Jake.
  • Adăugați-l la get-process sau aruncați o privire la răspunsul meu actualizat de mai sus. –  > Por Bart De Vos.
Omul de tinichea

Răspuns scurt:Adăugați $ErrorActionPreference = 'SilentlyContinue' la începutul codului tău, astfel încât să nu fie nevoie să adaugi -ErrorAction SilentlyContinue la fiecare comandă

Răspuns lung:https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details

Comentarii

  • Observați diferența: „Continue” (setarea implicită) continuă execuția, dar scrie erorile în consolă (de care op pare să vrea să scape, dacă l-am citit corect). ‘SilentlyContinue’ suprimă complet toate mesajele de eroare. –  > Por Frederik Struck-Schøning.
  • Nu faceți asta #17: Tăceți erorile cu $ErrorActionPreference = ‘SilentlyContinue’ –  > Por JosefZ.
  • „Adăugați $ErrorActionPreference = ‘SilentlyContinue’ la începutul codului dvs.” —> Acest lucru a ajutat cu adevărat, așa că vă mulțumesc foarte mult pentru ajutor și pentru că l-ați pus la dispoziție pe Internet. –  > Por Nishant.
  • Linkul gitbook este mort. Cred că acesta este un nou link către conținutul relevant: devops-collective-inc.gitbook.io/… –  > Por Martin Owen.