# Tratamento de Exceções

## Lançamento de Exceções

* O comando **throw "Bad thing happened"** cria uma exceção e interrompe a execução do script.
* O cmdlet **Write-Error -Message "Houston, we have a problem." -ErrorAction Stop** exibe um erro, e a configuração de **ErrorAction** para **Stop** faz com que o script pare com esse erro.

## Tratamento de Exceções

O princípio do tratamento de erros no PowerShell é baseado na construção:

```powershell
try {
  # código onde pode ocorrer um erro
}
catch {
  # código para tratar o erro
}
finally {
  # código que é sempre executado após try/catch
}
```

* O código no bloco `try` é executado primeiro.
* Se durante a execução do `try` ocorrer um erro irrecuperável, o controle é transferido para o bloco `catch`. No caso de não haver erros, o bloco `catch` é ignorado.
* No bloco `catch`, a variável automática `$PSItem` (ou `$_`) do tipo `ErrorRecord` está disponível, contendo detalhes da exceção.
* O bloco `finally` é sempre executado, independentemente de ter ocorrido um erro ou não. Ele é usado para garantir a execução de código importante, como fechar conexões ou liberar recursos.
* É possível usar `catch` e `finally` ao mesmo tempo. Isso permite tratar erros e, ao mesmo tempo, sempre executar ações de finalização, independentemente do resultado.

Exemplo:

```powershell
try {
  throw "Bad thing happened"
}
catch {
  Write-Host "Erro: $($_.Exception.Message)" -ForegroundColor Red
}
finally {
  Write-Host "Este bloco será sempre executado"
}
```

Neste exemplo, a exceção é lançada através de `throw`, depois é capturada no `catch`, onde a mensagem de erro é exibida, e em seguida, ocorre a execução do `finally`, onde pode-se colocar o código de finalização.

Esse modelo simplifica a escrita de scripts confiáveis com gerenciamento de erros e limpeza de recursos.

Essa abordagem para exceções ajuda a criar scripts PowerShell mais robustos e fáceis de manter, minimizando interrupções inesperadas e garantindo uma resposta oportuna a erros.

Com mais informações, você pode consultar o link:

{% embed url="<https://docs.microsoft.com/ru-ru/powershell/scripting/learn/deep-dives/everything-about-exceptions?view=powershell-7.1>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/pt/sherpa-rpa/sherpa-designer/sherpa-designer-otvety-na-chasto-zadavaemye-voprosy/powershell/obrabotka-isklyuchenii.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
