um erro num programa PowerShell irá impedi-lo de completar com sucesso. O uso de manipulação de erros com tentativa de blocos de captura permite gerenciar e responder a estes erros de terminação. Neste post eu vou cobrir os conceitos básicos de blocos de tentativa/captura e como encontrar e lidar com mensagens de exceção específicas.

compreender a sintaxe

a sintaxe do bloco de tentativa é muito simples., Ele é composto por duas seções entre parênteses encaracolados com o primeiro identificado como o bloco de tentativa e o segundo como o bloco de captura.

try { # Statement to try}catch { # What to do with terminating errors}

o bloco de tentativa pode ter tantas afirmações quanto eu quiser; no entanto, eu recomendaria mantê-lo para o menos possível, provavelmente apenas uma única declaração. O ponto de manipulação de erros é trabalhar com uma declaração de cada vez e lidar com qualquer coisa que ocorre com ela.

Aqui está um exemplo de um erro que ocorre na consola PowerShell., Aqui estou criando um novo arquivo usando o cmdlet New-Item e a especificação de uma pasta inexistente para o Caminho:

Se isso foi em um script, a saída deste para a tela seria de resíduos algum espaço a mais e o problema pode não ser imediatamente visível. Usando um bloqueio de tentativa, eu posso começar a manipular a saída de erro e torná-lo mais amigável administração.

aqui está o nosso mesmo comando de novo Item em um bloco de tentativa. Note que na linha 2 eu tive que adicionar o parâmetro de ErrorAction com um valor de Stop ao comando., Nem todos os erros são considerados “terminando”, então às vezes eu preciso adicionar este bit de código, a fim de terminar corretamente no bloco de captura.

Agora, em vez de um bloco de vermelho de raiva-olhar o texto, eu tenho uma simples mensagem de aviso de que ele teve um problema. O nome do caminho inexistente, juntamente com a paragem forçando-ErrorAction, deixa a lógica cair no bloco de captura e mostra o meu aviso personalizado.

usando a variável $Error

embora mais legível, isto não é muito útil., Só sei que o comando não foi bem sucedido, mas não sei porquê. Em vez de mostrar a minha mensagem personalizada, posso mostrar a mensagem de erro específica que ocorreu em vez de todo o bloco de exceção de texto vermelho. Quando um erro ocorre no bloco de tentativa, ele é salvo para a variável chamada erro$. A variável $Error contém um array de erros recentes, e eu posso referenciar o erro mais recente no array no índice 0.,

aviso de saída agora é mais descritivo, mostrando que o comando falhou porque não foi possível localizar uma parte do caminho. Esta mensagem fazia parte da nossa mensagem de erro original, mas agora é mais concisa.

usando mensagens de exceção

também posso usar vários blocos de captura no caso de querer lidar com erros específicos de forma diferente. Aqui eu vou mostrar duas mensagens personalizadas diferentes, uma para se o caminho não existe e outra para se um personagem ilegal é usado no nome., Note que na imagem seguinte eu corri o script duas vezes com dois comandos diferentes no bloco de tentativa. Cada comando, bloco de captura e saída final são indicados pelas setas laranja e verde.

Olhando linhas 14-16, há um terceiro bloco catch sem uma mensagem de exceção. Este é um bloco de capturas “catch-all” que funcionará se o erro não corresponder a qualquer outra exceção de bloco de capturas., Se eu estou executando este script e ver a mensagem no último bloco de captura, então eu sei que o erro não está relacionado a um personagem ilegal no nome do arquivo ou parte do caminho não ser válido.como é que eu sabia as mensagens de excepção a usar nos dois primeiros blocos de captura? Isto pode ser encontrado olhando para as diferentes informações anexadas à variável $Error. Depois que um comando falhou, eu posso executar $Error.Excepcao.GetType ().Nome completo para ver a mensagem de excepção do último erro que ocorreu.,

voltando para a consola PowerShell, eu reencaminhei o comando de novo Item com um caminho inexistente, depois executei o meu comando $Error para encontrar a mensagem de excepção.

O texto em vermelho imediatamente após o comando falhou também contém a mensagem de exceção, mas não contém o módulo é de. Olhando para a variável $Error mostra a mensagem completa a ser usada para um bloco de capturas.,

usando blocos de tentativa / captura dá poder adicional no tratamento de erros em um script e tomar diferentes ações com base no erro. O bloco de captura pode exibir mais do que apenas uma mensagem de erro. Ele pode conter lógica que irá resolver o erro e continuar a executar o resto do script.