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 ter as várias linhas de erros do PowerShell exibidas também.
Como posso desativar aqueles que estão sendo exibidos para o meu script?
fonte
-ErrorAction:SilentlyContinue
no PS 5.1. Eu estava chamando meu cmdlet do batch, então não sei se isso faz diferença. Mas boas informações quando você sabe que um erro aceitável podem ser lançadas.O Windows PowerShell fornece dois mecanismos para relatar erros: um mecanismo para erros de encerramento e outro mecanismo para erros de encerramento .
O código CmdLets interno pode chamar um
ThrowTerminatingError
método quando ocorre um erro que não permite ou não deve permitir que o cmdlet continue a processar seus objetos de entrada. O redator do script pode usar exceção para detectar esses erros.EX:
O código CmdLets interno pode chamar um
WriteError
método para relatar erros de não finalização quando o cmdlet pode continuar processando os objetos de entrada. O gravador do script pode então usar a opção -ErrorAction para ocultar as mensagens ou usar o$ErrorActionPreference
para configurar todo o comportamento do script.fonte
Tive um problema semelhante ao tentar resolver nomes de host usando
[system.net.dns]
. Se o IP não foi resolvido, o .Net gerou um erro de encerramento. Para evitar o erro de encerramento e ainda manter o controle da saída, criei uma função usandoTRAP
.POR EXEMPLO
fonte
Você está muito fora do caminho aqui.
Você já tem uma boa mensagem de erro grande. Por que diabos você iria querer escrever um código que verifica
$?
explicitamente após cada comando ? Isso é extremamente complicado e sujeito a erros. A solução correta é parar de verificar$?
.Em vez disso, use o mecanismo integrado do PowerShell para explodir por você. Você o habilita definindo a preferência de erro para o nível mais alto:
Eu coloco isso no topo de cada script que já escrevi e agora não tenho que verificar
$?
. Isso torna meu código muito mais simples e confiável.Se você se deparar com situações em que realmente precisa desativar esse comportamento, pode cometer
catch
o erro ou passar uma configuração para uma função específica usando o comum-ErrorAction
. No seu caso, você provavelmente deseja que o processo pare no primeiro erro, identifique o erro e registre-o.Observe que isso não resolve o caso quando os executáveis externos falham (código de saída diferente de zero, convencionalmente), então você ainda precisa verificar
$LASTEXITCODE
se invoca algum. Apesar dessa limitação, a configuração ainda economiza muito código e esforço.Confiabilidade adicional
Você também pode usar o modo estrito :
Isso evita que o PowerShell proceda silenciosamente quando você usa uma variável inexistente e em outras situações estranhas. (Consulte o
-Version
parâmetro para obter detalhes sobre o que ele restringe.)Combinar essas duas configurações torna o PowerShell muito mais uma linguagem fail-fast, o que torna sua programação muito mais fácil.
fonte
Adicione
-ErrorAction SilentlyContinue
ao seu script e você estará pronto para ir.fonte
Em alguns casos, você pode canalizar após o comando um Out-Null
fonte
Se você deseja que a mensagem de erro do PowerShell para um cmdlet seja suprimida, mas ainda deseja detectar o erro, use "-erroraction 'silentlyStop'"
fonte
New-Item -ItemType directory
(PowerShell v2.0)