Come ignorare un errore in Powershell e lasciarlo continuare?


42

Sto cercando di vedere se un processo è in esecuzione su più server e quindi formattarlo in una tabella.

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

Questa è la parte facile: quando il processo non esiste o se il server non è disponibile, PowerShell genera un grosso e brutto errore, rovina la tabella e non continua. Esempio

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

Come posso aggirare questo? Se desidero comunque ricevere una notifica se il processo non è disponibile o In esecuzione.

Risposte:


46

Aggiungi -ErrorAction SilentlyContinueal tuo comando.

Quando non si tratta di un errore, ma di -EV Err -EA SilentlyContinueun'eccezione non gestita, è necessario aggiungere , al fine di rilevare l'eccezione. ( EAè un alias per ErrorAction)

Puoi quindi valutare l'errore nel tuo script, dando un'occhiata $Err[0]


Temo che non funzioni se non lo metto nel posto sbagliato. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Nome processo Select-Object, machinename
Jake

Aggiungilo a get-processo dai un'occhiata alla mia risposta aggiornata sopra.
Bart De Vos,

13

Risposta breve: aggiungi $ErrorActionPreference = 'SilentlyContinue'all'inizio del codice in modo da non doverlo aggiungere -ErrorAction SilentlyContinuea tutti i comandi

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


1
Nota la differenza: 'Continua' (impostazione predefinita) continua l'esecuzione, ma scrive errori sulla console (di cui op sembra voler sbarazzarsi, se l'ho letto correttamente). 'SilentlyContinue' elimina completamente tutti i messaggi di errore.
Frederik Struck-Schøning,


"Aggiungi $ ErrorActionPreference = 'SilentlyContinue' all'inizio del codice" ---> Questo mi ha davvero aiutato, grazie mille per il tuo aiuto e per averlo reso disponibile su Internet.
Nishant,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.