TÓPICO
    about_Try_Catch_Finally

DESCRIÇÃO RESUMIDA
    Descreve como usar os blocos Try, Catch e Finally para tratar erros de 
    encerramento.


DESCRIÇÃO LONGA
    Use os blocos Try, Catch e Finally para responder ou tratar erros de 
    encerramento em scripts. A instrução Trap também pode ser usada para 
    tratar erros de encerramento em scripts. Para obter mais informações, 
    consulte about_Trap.


    Um erro de encerramento interrompe a execução de uma instrução. 
    Se o Windows PowerShell não tratar um erro de encerramento de 
    algum modo, o Windows PowerShell também deixará de executar a 
    função ou o script usando o pipeline atual. Em outras linguagens, 
    como C#, esses erros são chamados de exceções. Para obter mais 
    informações sobre erros, consulte about_Errors.


    Use o bloco Try para definir a seção de um script onde você 
    deseja que o Windows PowerShell monitore erros. Quando um erro 
    ocorre dentro do bloco Try, primeiro ele é salvo na variável 
    automática $Error. Depois, o Windows PowerShell procura um bloco 
    Catch para tratar o erro. Se a instrução Try não tiver um bloco Catch 
    correspondente, o Windows PowerShell continuará procurando um bloco 
    Catch ou uma instrução Trap apropriada nos escopos pai. Depois que um 
    bloco Catch for concluído, ou se não for possível localizar nenhum 
    bloco Catch ou instrução Trap apropriada, o bloco Finally será 
    executado. Se não for possível tratar o erro, ele será gravado no 
    fluxo de erros.


    Um bloco Catch pode incluir comandos para acompanhar a falha ou para 
    recuperar o fluxo esperado do script. Um bloco Catch pode especificar 
    os tipos de erro que captura. Uma instrução Try pode incluir vários 
    blocos Catch para diferentes tipos de erros.


    Um bloco Finally pode ser usado para liberar os recursos que já 
    não são mais necessários no seu script. 


    Try, Catch e Finally se assemelham às palavras-chave Try, Catch e 
    Finally usadas na linguagem de programação C#.


  Sintaxe
      Uma instrução Try contém um bloco Try, zero ou mais blocos 
      Catch e zero ou um bloco Finally. Uma instrução Try deve ter 
      pelo menos um bloco Catch ou um bloco Finally.


      Esta é a sintaxe do bloco Try:

          try {<lista de instruções>}


      A palavra-chave Try é seguida por uma lista de instruções entre 
      chaves. Se um erro de encerramento ocorrer enquanto as 
      instruções na lista de instruções estiverem em execução, o script 
      transmitirá o objeto de erro do bloco Try para um bloco Catch apropriado. 


      Esta é a sintaxe do bloco Catch: 

          catch [[<tipo de erro>][',' <tipo de erro>]*] {<lista de instrução>}


      Os tipos de erro aparecem entre colchetes. Os colchetes 
      externos indicam que o elemento é opcional.


      A palavra-chave Catch é seguida por uma lista opcional de 
      especificações de tipos de erro e uma lista de instruções. Se 
      um erro de encerramento ocorrer no bloco Try, o Windows PowerShell 
      procurará um bloco Catch apropriado. Se ele for encontrado, serão 
      executadas as instruções no bloco Catch.


      O bloco Catch pode especificar um ou mais tipos de erro. Um 
      tipo de erro é uma exceção do Microsoft .NET Framework ou 
      derivada de uma exceção do .NET Framework. Um bloco Catch trata 
      erros da classe de exceções do .NET Framework especificada ou 
      de qualquer classe derivada da classe especificada.


      Se um bloco Catch especificar um tipo de erro, tratará daquele 
      tipo de erro. Se não especificar um tipo de erro, tratará 
      qualquer erro encontrado no bloco Try. Uma instrução Try pode 
      incluir vários blocos Catch para os diferentes tipos de erro 
      especificados. 


      Esta é a sintaxe do bloco Finally:

          finally {<lista de instruções>}


      A palavra-chave Finally é seguida por uma lista de instruções 
      executada sempre que o script é executado, mesmo que a 
      instrução Try seja executada sem erro ou que um erro seja 
      capturado em uma instrução Catch. 


      Observe que pressionar CTRL+C interrompe o pipeline. Objetos 
      enviados ao pipeline não serão exibidos como saída. Portanto, 
      se você incluir uma instrução a ser exibida, como "O bloco 
      Finally foi executado", ela não será exibida depois que você 
      pressionar CTRL+C, mesmo que o bloco Finally tenha sido executado.


  Capturando erros
      O script de exemplo a seguir mostra um bloco Try com um bloco Catch:

          try { NonsenseString }
          capture {"Ocorreu um erro." }


      A palavra-chave Catch deve vir imediatamente após o bloco Try 
      ou outro bloco Catch. 


      O Windows PowerShell não reconhece "NonsenseString" como um 
      cmdlet ou outro item. A execução desse script retorna o 
      seguinte resultado:

          Ocorreu um erro.


      Quando o script encontra "NonsenseString", causa um erro de 
      encerramento. O bloco Catch trata o erro executando a lista de 
      instruções dentro do bloco.


  Usando várias instruções Catch
      Uma instrução Try pode ter qualquer número de blocos Catch. Por 
      exemplo, o script a seguir tem um bloco Try que baixa 
      MyFile.doc e contém dois blocos Catch:

          try
          {
             $wc = new-object System.Net.WebClient 
             $wc.DownloadFile("http://www.contoso.com/MyDoc.doc") 
          }
          catch [System.Net.WebException],[System.IO.IOException] 
          {
              "Não é possível baixar MyDoc.doc de http://www.contoso.com." 
          }
          catch
          {
              "Ocorreu um erro que não pôde ser resolvido." 
          }


      O primeiro bloco Catch trata erros dos tipos System.Net.WebExcep
      tion e System.IO.IOException. O segundo bloco Catch não 
      especifica um tipo de erro. O segundo bloco Catch tratará 
      qualquer outro erro de encerramento que ocorrer.


      O Windows PowerShell faz a correspondência de tipos de erro por 
      herança. Um bloco Catch trata erros da classe de exceções do .NET 
      Framework especificada ou de qualquer classe derivada da classe 
      especificada. O exemplo a seguir contém um bloco Catch que captura um 
      erro de "Comando não encontrado":

          catch [System.Management.Automation.CommandNotFoundException] 
          {"Exceção herdada" }


      O tipo de erro especificado, CommandNotFoundException, é 
      herdeiro do tipo System.SystemException. O exemplo a seguir 
      também captura um erro de "Comando não encontrado":

          catch [System.SystemException] {"Exceção de base" }


      Esse bloco Catch trata o erro de "Comando não encontrado" e 
      outros erros herdeiros do tipo SystemException.


      Se você especificar uma classe de erros e uma de suas classes 
      derivadas, coloque o bloco Catch para a classe derivada antes 
      do bloco Catch para a classe geral.


  Liberando recursos com o uso de Finally
      Para liberar os recursos usados por um script, adicione um 
      bloco Finally depois dos blocos Try e Catch. As instruções do bloco 
      Finally serão executadas, independentemente de o bloco Try encontrar 
      ou não um erro de encerramento. O Windows PowerShell executa o bloco 
      Finally antes de o script ser concluído ou o bloco atual sair do escopo. 


      Um bloco Finally será executado até mesmo se você usar CTRL+C para 
      interromper o script. Um bloco Finally também será executado se uma 
      palavra-chave Exit interromper o script a partir de um bloco Catch.


CONSULTE TAMBÉM
    about_Errors
    about_Trap




Sumário