Como usar o Try-Catch no PowerShell

Como usar o Try-Catch no PowerShell
Erros são confusos e estressantes para todos os usuários de computador; Eles são frequentemente desafiadores de ler, fazendo você se perguntar onde o script deu errado. Também é possível que um script que seja executado uma vez não seja executado novamente. Pode haver algum problema que surja quando você está menos esperando. É por isso que você deve incluir Manipulação de erros em tudo Script PowerShell você escreve.

PowerShell tem excelentes opções para lidar com erros. Mesmo no script mais direto, ele pode gerenciar erros, garantindo que um evento inesperado não cause uma falha no sistema. Ao implementar o conceito de manuseio de erros, os erros podem ser filtrados e mostrados para facilitar a compreensão, adicionando lógica extra ao processo de gerenciamento de erros. Tente e pegue blocos são utilizados para lidar ou responder aos erros de rescisão nos scripts do PowerShell.

O que é um bloco de tentativa em PowerShell

Vamos responder a esta pergunta nesta seção:

A "tente ”bloco é usado para especificar uma parte de um script em que o PowerShell deve procurar problemas. O $ Erro A variável automática armazena primeiro o erro quando o bloco de tentativa encontra um erro. Depois disso, PowerShell procura um bloco de captura para lidar com o erro. Powershell procura os pais escopos um bloco de captura adequado se o “tentar”A declaração não tem um bloco de captura emparelhado. O "finalmente”O bloco é executado após o bloco de captura, ou se nenhum bloco de captura apropriado foi encontrado. O erro é gravado no fluxo de erros, se não puder ser tratado.

A "Catch ”bloco compreende comandos para monitorar o erro ou restaurar o fluxo esperado do script. Os tipos de erros que um bloco de captura captura podem ser especificados. Vários tipos de erros estão incluídos em uma declaração de tentativa e vários blocos de captura são então utilizados para lidar com esses erros.

A Bloco "Finalmente" é utilizado para liberar ou liberar quaisquer recursos que seu script não requer mais.

Sintaxe do Try-Catch e finalmente em PowerShell

Uma declaração de tentativa é composta por um bloco de tentativa, com um ou mais blocos de "captura" e "finalmente". Você deve ter pelo menos um bloco "captura" ou "finalmente" a cada declaração de tentativa em seu script. Uma lista de declarações entre colchetes segue a palavra -chave TRY.

tentar

O script envia o objeto de erro do bloco de tentativa para o seu bloco de captura emparelhado se ocorrer um erro de rescisão enquanto as declarações na lista de declarações estão executando. Os tipos de erro são colocados entre colchetes e os suportes mais externos indicam a opcionalidade do elemento.

O bloco de captura possui uma lista de declarações e uma lista opcional para definições de tipo de erro. PowerShell procura o bloco de captura adequado se ocorrer um erro de rescisão no bloco de tentativa. Caso seja encontrado o bloco de tentativa emparelhado, o programa executará as instruções do bloco de captura.

pegar [[] [',' ]*]

Você pode especificar um ou mais tipos de erros no bloco de captura. Esses erros são os .Exceção líquida. Um bloco de captura funciona com exceções do especificado .Classe de exceção da estrutura da rede e outras classes derivadas.

Se um tipo de erro for especificado em um bloco de captura, é de responsabilidade do mesmo bloco de captura para lidar com esse erro. Se um tipo de erro não estiver definido no bloco de captura, ele lidará com qualquer erro que o bloco de tentativa encontre. Uma declaração de tentativa pode ter numerosos blocos de captura para lidar com vários tipos de erro. A palavra -chave finalmente compreende uma lista de declarações que é executada toda vez que o script é executado, se o bloco de tentativa é executado sem erro ou se existir um erro em uma instrução de captura.

finalmente

Executando o script de try-capation único em PowerShell

Agora, verificaremos a implementação prática do método de tentativa. Em primeiro lugar, abra seu Windows PowerShell Ise e crie um novo arquivo:

Escreva o código a seguir neste arquivo e salve este script PowerShell chamado “testfile2.ps1”; você pode nomear como quiser.

Tente nãonsensestring
capturar "ocorreu um erro."

PowerShell não reconhece o "não -sentido" como qualquer objeto ou comando, portanto a declaração de captura será executada após a execução do script:

Executando múltiplos try-capatch em PowerShell

Qualquer número de blocos de captura pode ser usado com uma declaração de tentativa. No exemplo abaixo, adicionamos um bloco de tentativa que download “Mydoc.Doc”E tem dois blocos de captura:

O primeiro bloco de captura vai lidar com Sistema.Io.Ioexception e Sistema.Líquido.WebException tipos de erros. O tipo de erro no segundo bloco de captura não é fornecido. Este bloco também é responsável por lidar com outros erros de rescisão.

tentar
$ wc = sistema de novo objeto.Líquido.Cliente da web
$ wc.Downloadfile ("http: // www.contoso.com/mydoc.Doc "," E: \ Download \ TestFile.Doc ")
Write-host “O arquivo baixou com sucesso !”

Catch [System.Líquido.WebException], [sistema.Io.Ioexception]
"Incapaz de baixar o MyDoc.Doc de http: // www.contoso.com."

pegar
"Ocorreu um erro que não pôde ser resolvido."

Salve o código e execute -o.

A saída declara que o “Mydoc.Doc”O arquivo é baixado com sucesso no“E: \ download ” pasta:

Para verificar a existência do recém -baixado “Mydoc.Doc”Arquivo, utilizaremos o“Get-Childitem”Comando. Este comando extrairá todos os itens infantis do “E: \ Download" pasta:

> Get-Childitem “E: \ Download”

Powershell usa herança para combinar com os tipos de erro. Um bloco de captura é usado no exemplo abaixo para pegar um “Comando não encontrado”Erro:

Catch [System.Gerenciamento.Automação.CommandNotFoundException]
"Exceção herdada"

Aqui, temos a exceção.

Extrair informações de exceção no PowerShell

O erro atual pode ser obtido via $ _, também conhecido como $ Psitem, Dentro de um bloco de captura. O objeto é do “ErrorreCord Type,”E contém informações sobre o erro encontrado.

Tente nãonsensestring
pegar
Write-host "Ocorreu um erro:"
Write-host $ _

Aí está!

Conclusão

Os blocos PowerShell Tryatch permitem lidar com problemas de script e executar várias operações, dependendo dos erros encontrados. Não apenas a mensagem de erro pode ser exibida no bloco de captura, mas também pode incluir lógica para lidar com o erro e continuar executando o script restante.

Neste artigo, fornecemos a você diferentes métodos de Usando Try-Catch em PowerShell. Esses métodos incluem a execução de ÚNICO TRY-CACH, múltiplas declarações de tentativa e extração de informações de exceção no PowerShell.