ti-enxame.com

Powershell: Como posso impedir que erros sejam exibidos em um script?

Quando meu script do PowerShell tenta, por exemplo, criar um objeto do SQL Server para um servidor que não existe ("bla" no meu caso), o PowerShell exibe muitos erros do PowerShell em vermelho.

Como meu script verifica o valor de $? após essas chamadas e exibe e registra erros, prefiro não exibir também as várias linhas de erros do PowerShell.

Como posso desativar aqueles que estão sendo exibidos para o meu script?

65
Andrew J. Brehm

Você tem algumas opções. O mais fácil envolve o uso das configurações de ErrorAction.

-Erroraction é um parâmetro universal para todos os cmdlets. Se houver comandos especiais que você deseja ignorar, você poderá usar -erroraction 'silentlycontinue', que basicamente ignorará todas as mensagens de erro geradas por esse comando. Você também pode usar o valor Ignore (no PowerShell 3+):

Ao contrário do SilentlyContinue, Ignore não adiciona a mensagem de erro à variável automática $ Error.

Se você quiser ignorar todos os erros em um script, você pode usar a variável de sistema $ErrorActionPreference e fazer a mesma coisa: $ErrorActionPreference= 'silentlycontinue'

Veja about_CommonParameters para mais informações sobre -ErrorAction. Veja about_preference_variables para mais informações sobre $ ErrorActionPreference.

99
JNK

O Windows PowerShell fornece dois mecanismos para relatar erros: um mecanismo para erros de finalização e outro mecanismo para erros de não finalização.

O código interno CmdLets pode chamar um método ThrowTerminatingError quando ocorre um erro que não permite ou não permitir que o cmdlet continue processando seus objetos de entrada. O script writter pode usar exceção para capturar esse erro.

EX:

try
{
  Your database code
}
catch
{
  Error reporting/logging
}

O código CmdLets interno pode chamar um método WriteError para relatar erros de não finalização quando o cmdlet pode continuar processando os objetos de entrada. O criador de scripts pode usar a opção -ErrorAction para ocultar as mensagens ou usar o $ErrorActionPreference para configurar todo o comportamento do script.

15
JPBlanc

Eu tive um problema semelhante ao tentar resolver nomes de host usando [system.net.dns]. Se o IP não foi resolvido, o .Net emitiu um erro de terminação. Para evitar o erro de finalização e ainda manter o controle da saída, criei uma função usando TRAP.

POR EXEMPLO.

Function Get-IP 
{PARAM   ([string]$HostName="")
PROCESS {TRAP 
             {"" ;continue} 
             [system.net.dns]::gethostaddresses($HostName)
        }
}
6
D-W

Adicione -ErrorAction SilentlyContinue ao seu script e você estará pronto para ir.

0
Jayant Rajwani