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:
$ErrorActionPreference = 'Stop'
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 :
Set-StrictMode -Version Latest
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.