Como ignorar um erro no Powershell e deixá-lo continuar?

42

Estou tentando ver se um processo está sendo executado em vários servidores e formatá-lo em uma tabela.

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

Essa é a parte fácil - quando o processo não existe ou o servidor não está disponível, o powershell gera um grande erro feio, estraga a mesa e não continua. Exemplo

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

Como contornar isso? Se eu ainda gostaria de ser notificado se o processo não estiver disponível ou Em execução.

Jake
fonte

Respostas:

46

Adicione -ErrorAction SilentlyContinueao seu comando.

Quando não se trata de um erro, mas de uma exceção não tratada, você deve adicionar -EV Err -EA SilentlyContinuepara capturar a exceção. ( EAé um apelido para ErrorAction)

Você pode avaliar o erro no seu script, observando $Err[0]

Bart De Vos
fonte
Receio que isso não funcione, a menos que eu esteja no lugar errado. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Nome do processo Select-Object, nome da máquina
Jake
Adicione-o get-processou dê uma olhada na minha resposta atualizada acima.
Bart De Vos
13

Resposta curta: adicione $ErrorActionPreference = 'SilentlyContinue'no início do seu código para não precisar adicionar -ErrorAction SilentlyContinuea todos os comandos

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

Homem de Lata
fonte
1
Observe a diferença: 'Continue' (configuração padrão) continua a execução, mas grava erros no console (do qual op parece querer se livrar, se eu o ler corretamente). 'SilentlyContinue' suprime completamente todas as mensagens de erro.
Frederik Struck-Schøning
"Adicione $ ErrorActionPreference = 'SilentlyContinue' no início do seu código" ---> Isso realmente ajudou, muito obrigado por sua Ajuda e por disponibilizá-lo na Internet.
Nishant