PowerShell:
Tratamento de erros

Como fazer:

# Tentativa básica com Try-Catch para tratar exceções
try {
    # Código que pode desencadear um erro
    $result = 1 / 0
} catch {
    # O que fazer se ocorrer um erro
    Write-Host "Ops, ocorreu um erro: $_"
}

# Emitindo uma mensagem de erro personalizada
try {
    Get-Item "arquivoinexistente.txt" -ErrorAction Stop
} catch {
    Write-Host "O arquivo não pôde ser encontrado."
}

# Usando a variável $Error para inspecionar o último erro

Aprofundando

O PowerShell evoluiu muito desde sua criação como Monad. O tratamento de erros tornou-se mais robusto ao longo do tempo, oferecendo funcionalidades semelhantes a outras linguagens de programação. A sintaxe try-catch-finally é um desses exemplos de compartilhamento entre linguagens como C#. Antes disso, os scripters dependiam muito da verificação de condições e do uso da variável automática $Error.

O PowerShell também tem dois principais tipos de erros: termináveis e não termináveis. Erros termináveis interrompem o script, a menos que sejam capturados em um bloco try-catch, enquanto os não termináveis não o farão, a menos que você especifique -ErrorAction Stop. Essa distinção é crucial, pois confere controle refinado sobre o tratamento de erros, decidindo se um erro realmente justifica a parada total do script ou pode simplesmente ser registrado e ignorado.

O tratamento de erros do PowerShell permite também um bloco finally, que é executado não importa o quê - se ocorrer um erro ou não. É ótimo para tarefas de limpeza.

Quando você está profundamente envolvido na criação de scripts, também pode tratar tipos específicos de exceções, o que lhe dá ainda mais controle.

Alternativamente, há o parâmetro antigo -ErrorVariable para capturar erros sem lançar uma exceção. E a variável $? diz se a última operação foi bem-sucedida. São ferramentas úteis, embora um pouco menos limpas do que um sólido try-catch.

Veja também