• 04/01/2019
  • 6 minutos para ler
    • S
    • s
    • c

BREVE DESCRIÇÃO

Descreve como usar o Try Catch e Finally blocos para handleterminating erros.,

DESCRIÇÃO LONGA

Use Try Catch e Finally blocos para responder ou manipular terminatingerrors em scripts. A declaração Trap também pode ser usada para lidar com erros terminatórios em scripts. Para mais informações, consulte about_Trap.

um erro de terminação impede uma declaração de correr. Se o PowerShell faz nothandle um erro de terminação de alguma forma, o PowerShell também pára de executar a função ou script usando o pipeline atual., Em outras línguas,como C#, erros de terminação são referidos como exceções.

Use o bloco Try para definir uma secção de um script no qual deseja controlar os erros. Quando um erro ocorre dentro do bloco Try, o erro é primeiramente salvo para a variável automática. Thensearches PowerShell para um bloco Catch para lidar com o erro., Se o Try declaração de não ter uma correspondência Catch bloco, o PowerShell continua a procurar anappropriate Catch bloquear ou Trap instrução do pai escopos. Depois de umaCatch bloco é concluída ou se não apropriado Catch bloquear ou Trapinstrução é encontrada, o Finally bloco é executado. Se o erro não puder ser tratado, o erro é escrito no fluxo de erro.,

aCatch bloco pode incluir comandos para rastrear o erro ou para recuperar o fluxo esperado do script. ACatch bloco pode especificar que tipo de erro são as capturas. ATry statement can include multipleCatch blocks for differentkinds of errors.

aFinally bloco pode ser usado para libertar quaisquer recursos que já não sejam necessários pelo seu script.,

Try, Catch, and Finally resemble the Try, Catch, and Finallykeywords used in the C# programming language.

SYNTAX

A Try statement contains a Try block, zero or more Catch blocks, and zeroor one Finally block. A Try statement must have at least one Catch blockor one Finally block.,

a seguir mostra O Try bloco de sintaxe:

try {<statement list>}

Try palavra-chave é seguido por uma lista de instrução, em chaves. If a terminatingerror occurs while the statements in the statement list are being run, thescript passes the error object from the Try block to an appropriateCatchblock.

o seguinte mostra o Catch sintaxe de bloco:

catch *] {<statement list>}

tipos de erro aparecem entre parêntesis., Os suportes exteriores indicam o elemento isopcional.

a palavra-chave Catch é seguida por uma lista opcional de tipificações de erros e uma lista de declarações. Se um erro de terminação ocorrer no blocoTry, o PowerShell procura um bloco apropriado Catch. Ifone is found, the statements in the Catch block are executed.

O blocoCatch pode indicar um ou mais tipos de erro. Um tipo de erro é uma exceção de Framework Amicrosoft. NET ou uma exceção que é derivada de A.,Excepção do quadro da rede. ACatch o bloco lida com erros do especificado .Classe de exceção do quadro de rede ou de qualquer classe que deriva da classe específica.

If a Catch block specifies an error type, that Catch block handes thattype of error. Se um Catch bloco não especificar um tipo de erro, que Catchbloco de alças qualquer erro encontrado no Try bloquear., ATry statement caninclude multipleCatch blocks for the different specified error types.

a seguir mostra O Finally bloco de sintaxe:

finally {<statement list>}

Finally palavra-chave é seguido por uma lista de instrução que é executada a cada vez thescript é executado, mesmo se o Try instrução correu sem erro ou um erro wascaught em um Catch instrução.

Note que se carregar em CTRL+C pára a conduta., Os objectivos que são enviados para o gasoduto não serão apresentados como saída. Portanto, se você incluir uma declaração a ser exibida, como “Finally block has run”, ela não será exibida depois de você carregar em CTRL+C, mesmo que oFinally bloco executado.

a CAPTURA de ERROS

O script de exemplo a seguir mostra uma Try bloco com uma Catch bloco:

try { NonsenseString }catch { "An error occurred." }

Catch palavra-chave deve seguir imediatamente o Try bloquear ou outro Catchbloquear.,

PowerShell não reconhece “NonsenseString” como um cmdlet ou outro item.A execução deste programa devolve o seguinte resultado:

An error occurred.

quando o programa encontra “NonsenseString”, provoca um erro de terminação. TheCatch block handles the error by running the statement list inside the block.

usando declarações de capturas múltiplas

a Try a declaração pode ter qualquer número de blocos Catch blocos., Por exemplo, thefollowing script possui uma Try bloco de downloads MyDoc.doc, e containstwo Catch blocos:

primeiro Catch block lida com os erros do Sistema.Líquida.WebException andSystem.IO.IOException tipos. O segundo bloco Catch não especifica o tipo de erro anerror. The second Catch block handles any other terminating errors thatocur.

PowerShell corresponde aos tipos de erros por herança. A Catch o bloco lida com os erros dos especificados .,Classe de excepção do quadro líquido ou de qualquer classe que resulte da classe especificada. O exemplo a seguir contém um Catch bloco de thatcatches um “Comando Não Encontrado” erro:

catch {"Inherited Exception" }

O especificado tipo de erro, CommandNotFoundException, herda theSystem.Tipo de excepção do sistema. O exemplo seguinte também captura um comando não encontrado erro:

catch {"Base Exception" }

This Catch bloco lida com o erro “Command Not Found” e outros erros que lhe dão origem a partir do tipo SystemException.,

se indicar uma classe de erro e uma das suas classes derivadas, coloque o bloco Catchpara a classe derivada antes do bloco Catch para a classe geral.

a Utilização de Armadilhas para Tentar Capturar

Quando ocorre um erro de encerramento em um Try bloco com uma Trap definido withinthe Try bloco, mesmo se houver uma correspondência Catch bloco, Trap statementtakes de controle.,

Se Trap existe uma maior bloco de Try, e não há nenhuma correspondênciaCatch bloco dentro do escopo atual, o Trap vai assumir o controle, mesmo ifany escopo pai tem uma correspondência Catch bloquear.

acessando a informação de exceção

dentro de um id

bloco, o erro atual pode ser acessado usando$_, que também é conhecido como$PSItem. O objeto é do tipo ErrorRecord.,

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_}

Executar este script retorna o seguinte resultado:

An Error occurred:The term 'NonsenseString' is not recognized as the name of a cmdlet, function,script file, or operable program. Check the spelling of the name, or if a pathwas included, verify that the path is correct and try again.

Existem outras propriedades que podem ser acessados, como ScriptStackTrace,Exceção e ErrorDetails. Por exemplo, se alterar o script para seguintes:

try { NonsenseString }catch { Write-Host "An error occurred:" Write-Host $_.ScriptStackTrace}

O resultado será semelhante a:

An Error occurred:at <ScriptBlock>, <No file>: line 2

para LIBERAR RECURSOS UTILIZANDO FINALMENTE

Para liberar os recursos usados por um script, adicionar um Finally bloco após o Try eCatch blocos., The Finally block statements run regardless of whether theTry block encounters a terminating error. PowerShell executa o id

bloqueia antes do script terminar ou antes do bloco atual sair do escopo.

A Finally bloqueia a execução mesmo que use o CTRL+C para parar o thescript. AFinally block also runs if an Exit keyword stops the script fromwithin aCatch block.,

VEJA TAMBÉM:

about_Break

about_Continue

about_Scopes

about_Throw

about_Trap