¿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.

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]


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.