¿Cómo ignorar un error en Powershell y dejar que continúe?

42

Estoy tratando de ver si un proceso se está ejecutando en varios servidores y luego formatearlo en una tabla.

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

Esa es la parte fácil: cuando el proceso no existe o si el servidor no está disponible, powershell genera un gran error feo, desordena la tabla y no continúa. Ejemplo

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

¿Cómo puedo evitar esto? Si todavía me gustaría recibir una notificación si el proceso no está disponible o en ejecución.

Jake
fuente

Respuestas:

46

Añadir -ErrorAction SilentlyContinuea su comando.

Cuando no se trata de un error, sino de una Excepción no controlada, debe agregarla -EV Err -EA SilentlyContinuepara detectar la excepción. ( EAes un alias para ErrorAction)

Luego puede evaluar el error en su secuencia de comandos, mirando $Err[0]

Bart De Vos
fuente
Me temo que eso no funciona a menos que lo coloque en el lugar equivocado. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Select-Object processname, machinename
Jake
Agréguelo get-processo eche un vistazo a mi respuesta actualizada arriba.
Bart De Vos
13

Respuesta corta: agregue $ErrorActionPreference = 'SilentlyContinue'al comienzo de su código para que no necesite agregar -ErrorAction SilentlyContinuea cada comando

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

Hombre de hojalata
fuente
1
Tenga en cuenta la diferencia: 'Continuar' (configuración predeterminada) continúa la ejecución, pero escribe errores en la consola (de lo que parece querer deshacerse, si lo leo correctamente). 'SilentlyContinue' suprime todos los mensajes de error por completo.
Frederik Struck-Schøning
"Agregue $ ErrorActionPreference = 'SilentlyContinue' al comienzo de su código" ---> Esto realmente ayudó, así que muchas gracias por su Ayuda y por hacerla disponible en Internet.
Nishant