Introdução

Conforme nossos scripts se tornem mais críticos temos que nos preocupar com o que pode ocorrer caso o script falhe, ou como o script vai se comportar em caso de falha.
No Powershell podemos utilizar como solução para controlar os erros os comandos Try e Catch em nossos scripts, além disso podemos também configurar a opção de ErrorPreferenceAction e executar verificações nas variável $? e $Error[0]

Utilizando a variável $?

Se você já esta habituado com algum ambiente shell (linux...) você talvez conheça essa variável, sempre que executamos qualquer cmdlet no Powershell ele armazena um resultado True ou False na variável $?, por exemplo execute o comando

Get-Process “HowToServer”
$?

Como o comando falhou (o correu um erro) a variável $? continha o valor False, se o comando tivesse sido concluído com sucesso teriamos o valor True.

Get-Process “Notepad”
$?

A variável $? sempre armazena o resultado do ultimo comando executado, por tanto após executar outro comando ele sera sobrescrita com o novo valor.

Lembrando que a variável $? armazena o True ou False conforme o resultado do comando se o comando não apresentar erros mas retornou um resultado que é um false, teríamos o valor True igual na variável $?.

Utilizando Try e Catch

Os comandos Try e Catch, também utilizados em outras linguagens, servem para manipular erros que parariam o script.
Podemos executar determinada ação caso ocorra um erro, por exemplo utilizando o cmdlet Test-Connection para pingar um endereço

Try {
Test-Connection 8.8.8.8 -ErrorAction Stop
} Catch {
write-host "Falhou ping"
}

Utilizamos o parâmetro -ErrorAction para informamos que em caso de algum erro no comando Test-Connection queremos que o script pare, assim quando o Test-Connection apresentar o erro e for parar o script dentro do Try o Catch é executado.

Apesar de simples isso é de grande utilidade em nossos scripts.

Utilizando a variável $Error

A variável $Error é uma variável de ambiente que armazena as mensagens de erro que ocorreram na sessão Powershell, podemos utilizar ela para logarmos exatamente qual erro ocorreu ou enviarmos o erro por e-mail.

Na verdade $Error é um vetor e não uma simples variável, ele armazena todos os últimos erros que ocorreram podemos utilizado da seguinte forma.

Get-Process "HowToServer"
Write-Host $Error

Podemos determinar a posição que queremos ver do vetor, utilizando [X] após a variável, podemos também limpar o conteúdo da variável $error.

$Error.Clear()

Caso nosso script apresente mais de um erro e queiramos verificar somente o primeiro erro.

Get-Process "HowToServer"
Get-Process "MatheusKamphorst"
write-host "Sem determinar a posição `n"$Error

Para determinarmos a posição que queremos e assim pegarmos somente o ultimo erro utilizamos

Write-Host $Error[0]

Configurando a ErrorPreferenceAction

Opção que determina o comportamento padrão que o Powershell tera quando um cmdlet retornar um erro, podendo ter como comportamento as opções:

  • SilentlyContinue, Oculta os erros e continuar a execução do script.

  • Stop, Finaliza a execução do script caso ocorra um erro.

  • Continue, Exibe o erro mas continua com a execução.

  • Inquire, Pergunta para o usuário qual ação ele quer tomar.

  • Ignore,Ignora os erros.

Essa opção pode ser configurada de duas formas diferentes, individualmente para cada comando ou a nível global na sessão Powershell.

Para configurar individualmente em cada comando basta adicionarmos o parâmetro -ErrorAction

Get-Process “HowToServer” -ErrorAction “Inquire”

Para configurar em nível de sessão basta configurar a variável de ambiente $ErrorPreferenceAction com o valor desejado.

$ErrorActionPreference = “SilentlyContinue”
Get-Process “HowToServer”

Referencias

Os seguintes sites contém mais material sobre o assunto e podem ter sido utilizados como fonte.

Este artigo foi originalmente escrito por:
Matheus Kamphorst
blog: http://howtoserver.com