Interpretar ações de erro para comandos do Windows PowerShell

Concluído

Quando um comando do PowerShell gera um erro, esse erro pode ser um dos dois tipos: um erro de encerramento ou um erro não-encerrante. Um erro de encerramento ocorre quando o Windows PowerShell determina que não é possível continuar processando após o erro e o comando é interrompido. Um erro não finalizador ocorre quando o Windows PowerShell determina que é possível continuar o processamento após o erro. Quando ocorre um erro de não término, o script em execução ou o pipeline em execução continua. Erros não terminantes são mais comuns que erros terminantes.

Considere o seguinte código:

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1

Se você presumir que o computador LON-SVR1 não está disponível na rede, o Get-WmiObject gerará um erro ao tentar consultar esse computador. No entanto, o comando pode continuar com o próximo computador, LON-DC1. Portanto, esse é um erro de não término.

$ErrorActionPreference

O Windows PowerShell tem uma variável global interna chamada $ErrorActionPreference. Quando um comando gera um erro não finalizador, o comando verifica essa variável para decidir o que deve fazer. A variável pode ter um dos quatro valores possíveis a seguir:

  • Continue é o padrão e informa ao comando para exibir uma mensagem de erro e continuar a ser executado.
  • SilentlyContinue instrui o comando a não exibir mensagens de erro, mas continuar executando.
  • Inquire solicita ao comando que apresente um prompt perguntando ao usuário o que fazer.
  • Parar diz ao comando para tratar o erro como finalização e parar a execução.

Para definir a variável $ErrorActionPreference, use a seguinte sintaxe:

$ErrorActionPreference = 'Inquire'

Observação

Seja seletivo sobre como usar SilentlyContinue para $ErrorActionPreference. Talvez você ache que isso faz com que o script seja melhor para os usuários, mas pode dificultar a solução de problemas.

Se você pretende interceptar um erro no script para que possa gerenciar o erro, os comandos devem usar a ação Interromper. Você pode capturar e gerenciar apenas erros de terminação.

Parâmetro –ErrorAction

Todos os comandos do Windows PowerShell têm o parâmetro –ErrorAction. Esse parâmetro tem o alias –EA. O parâmetro aceita os mesmos valores que $ErrorActionPreference, e o parâmetro substitui a variável para esse comando. Se você espera que ocorra um erro em um comando, use –ErrorAction para definir a ação de erro desse comando como Interromper. Fazer isso permite que você capture e gerencie o erro desse comando, mas deixa todos os outros comandos usarem a ação em $ErrorActionPreference. Um exemplo é:

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1 -ErrorAction Stop

A única vez que você modificará $ErrorActionPreference é quando espera um erro fora de um comando do Windows PowerShell, como quando você está executando um método como o seguinte:

Get-Process –Name Notepad | ForEach-Object { $PSItem.Kill() }

Neste exemplo, o método Kill() pode gerar um erro. Mas como não é um comando do Windows PowerShell, não tem o parâmetro –ErrorAction. Em vez disso, defina $ErrorActionPreference como Interromper, antes de executar o método, e depois defina a variável novamente como Continuar, após executar o método.