Compartilhar via


about_Trap

TÓPICO
    about_Trap

DESCRIÇÃO RESUMIDA
    Descreve uma palavra-chave que trata um erro de encerramento.


DESCRIÇÃO LONGA
    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 no pipeline atual. Em outras linguagens, como 
    C#, esses erros são chamados de exceções.


    A palavra-chave Trap especifica uma lista de instruções a serem 
    executadas quando ocorrer um erro de encerramento. As instruções 
    Trap tratam os erros de encerramento e permitem que a execução do 
    script ou da função continue, em vez de ser interrompida.


  Sintaxe

      Esta é a sintaxe da instrução Trap:

          trap [[<tipo de erro>]] {<lista de instruções>}


      A instrução Trap inclui uma lista de instruções a serem 
      executadas quando ocorrer um erro de encerramento. A 
      palavra-chave Trap pode, opcionalmente, especificar um tipo de 
      erro. Um tipo de erro requer colchetes. 


      Um script ou um comando pode ter várias instruções Trap. As 
      instruções Trap podem aparecer em qualquer parte do script ou 
      comando. 


  Interceptando todos os erros de encerramento

      Quando ocorre um erro de encerramento que não é tratado de 
      outro modo em um script ou comando, o Windows PowerShell 
      procura uma instrução Trap que possa tratá-lo. Se uma instrução 
      Trap estiver presente, o Windows PowerShell continuará 
      executando o script ou o comando na instrução Trap.
 

      O exemplo a seguir é uma instrução Trap muito simples:

          trap {"Erro encontrado."}


      Essa instrução Trap intercepta qualquer erro de encerramento. O 
      exemplo a seguir é uma função que contém essa instrução Trap:

          function TrapTest {
              trap {"Erro encontrado."}
              nonsenseString
              }


      Essa função inclui uma cadeia de caracteres sem sentido que 
      causa um erro. Executar a função retorna o seguinte:

          C:\PS> TrapTest
          Erro encontrado.


      O exemplo a seguir inclui uma instrução Trap que exibe o erro 
      usando a variável automática $_:

          function TrapTest {
              trap {"Erro encontrado: $_"}
              nonsenseString
              }


      Executar essa versão da função retorna o seguinte:

          C:\PS> TrapTest
          Erro encontrado: O termo 'nonsenseString' não é reconhecido 
          como nome de cmdlet, função, arquivo de script ou programa 
          operável. Verifique a grafia do nome ou, se um caminho 
          tiver sido incluído, veja se o caminho está correto e tente 
          novamente. 


      As instruções Trap também podem ser mais complexas. Uma 
      instrução Trap pode incluir várias condições ou chamadas de 
      função. Ela pode registrar em log, testar ou até mesmo executar 
      outro programa.


   Interceptando erros de encerramento especificados

      O exemplo a seguir é uma instrução Trap que intercepta o tipo 
      de erro CommandNotFoundException:

          trap [System.Management.Automation.CommandNotFoundException]
           {"Erro de comando interceptado"}


      Quando uma função ou um script encontra uma cadeia de 
      caracteres que não corresponde a um comando conhecido, essa 
      instrução Trap exibe a cadeia de caracteres "Erro de comando 
      interceptado". Depois de executar qualquer instrução na lista 
      de instruções Trap, o Windows PowerShell grava o objeto de erro 
      no fluxo de erros, e então continua o script.


      O Windows PowerShell usa os tipos de exceção do Microsoft .NET 
      Framework. O exemplo a seguir especifica o tipo de erro 
      System.Exception:

          trap [System.Exception] {"Um erro interceptado"}


      O tipo de erro CommandNotFoundException é herdeiro do tipo 
      System.Exception. Essa instrução intercepta um erro criado por 
      um comando desconhecido. Ela intercepta também outros tipos de erro.


      É possível ter mais de uma instrução Trap em um script. Cada 
      erro pode ser interceptado por somente uma instrução Trap. Se 
      um erro ocorrer e houver mais de uma instrução Trap disponível, 
      o Windows PowerShell usará a instrução Trap com o tipo de erro 
      de correspondência mais específica com o erro. 


      O exemplo de script a seguir contém um erro. O script inclui 
      uma instrução Trap geral que intercepta qualquer erro de 
      encerramento, e uma instrução Trap específica que estabelece o tipo 
      CommandNotFoundException.

          trap {"Outro erro de encerramento interceptado" } trap 
          [System.Management.Automation.CommandNotFoundException] {"Erro de 
          comando interceptado"} nonsenseString


      A execução desse script produz o seguinte resultado:

          Erro de comando interceptado
          O termo 'nonsenseString' não é reconhecido como nome de 
          cmdlet, função, arquivo de script ou programa operável. 
          Verifique a grafia do nome ou, se um caminho tiver sido 
          incluído, veja se o caminho está correto e tente novamente.
          At C:\PS>testScript1.ps1:3 char:19
          +   nonsenseString <<<< 


      Como o Windows PowerShell não reconhece "nonsenseString" como 
      um cmdlet ou outro item, retorna um erro CommandNotFoundExceptio
      n. Esse erro de encerramento é interceptado pela instrução Trap 
      específica.


      O exemplo de script a seguir contém as mesmas instruções Trap 
      com um erro diferente:

          trap {"Outro erro de encerramento interceptado" } 
          trap [System.Management.Automation.CommandNotFoundException] 
              {"Erro de comando interceptado"}
          1/$null


      A execução desse script produz o seguinte resultado:

          Outro erro de encerramento interceptado
          Tentativa de divisão por zero.
          At C:PS> errorX.ps1:3 char:7
          +   1/ <<<< $null


      A tentativa de dividir por zero não cria um erro CommandNotFound
      Exception. Em vez disso, o erro é interceptado pela outra 
      instrução Trap, que intercepta qualquer erro de encerramento. 


  Interceptação de erros e escopo

      Se um erro de encerramento ocorrer no mesmo escopo da instrução 
      Trap, depois de executar as instruções Trap, o Windows 
      PowerShell continuará na instrução após o erro. Se a instrução 
      Trap estiver em um escopo diferente do erro, a execução 
      continuará na próxima instrução que estiver no mesmo escopo da 
      instrução Trap.
 

      Por exemplo, se um erro ocorrer em uma função, e a instrução 
      Trap estiver nessa função, o script continuará na próxima 
      instrução. O script a seguir, por exemplo, contém um erro e uma 
      instrução Trap:

          function function1 {
              trap { "Um erro: " }
              NonsenseString
              "function1 foi concluída"
              }


      Posteriormente no script, a execução da função Function1 gera o 
      seguinte resultado: 

          function1
          Um erro: 
          O termo 'NonsenseString' não é reconhecido como nome de 
          cmdlet, função, arquivo de script ou programa operável. 
          Verifique a grafia do nome ou, se um caminho tiver sido 
          incluído, veja se o caminho está correto e tente novamente.
          At C:\PS>TestScript1.ps1:3 char:19
          +   NonsenseString <<<<

          function1 foi concluída 
 

      A instrução Trap na função intercepta o erro. Depois de exibir 
      a mensagem, o Windows PowerShell continua a executar a função. 
      Observe que Function1 foi concluída.


      Compare isso com o exemplo a seguir, que tem o mesmo erro e a 
      mesma instrução Trap. Neste exemplo, a instrução Trap ocorre 
      fora da função:

          function function2 {
              NonsenseString
              "function2 foi concluída"
              }

          trap { "Um erro: " }
              . . .
          function2


      Posteriormente no script, a execução da função Function2 gera o 
      seguinte resultado:

          Um erro: 
          O termo 'NonsenseString' não é reconhecido como nome de 
          cmdlet, função, arquivo de script ou programa operável. 
          Verifique a grafia do nome ou, se um caminho tiver sido 
          incluído, veja se o caminho está correto e tente novamente.
          At C:\PS>TestScript2.ps1:4 char:19
          +   NonsenseString <<<<


      Nesse exemplo, o comando "function2 foi concluída" não foi 
      executado. Embora os dois erros de encerramento ocorram dentro 
      de uma função, se a instrução Trap estiver fora da função, o 
      Windows PowerShell não voltará a ela depois de executar a 
      instrução Trap.


  Usando as palavras-chave Break e Continue

      Você pode usar as palavras-chave Break e Continue em uma 
      instrução Trap para determinar se um script ou comando 
      continuará em execução após um erro de encerramento. 


      Se você incluir uma instrução Break em uma lista de instruções 
      Trap, o Windows PowerShell interromperá a função ou o script. A 
      função de exemplo a seguir usa a palavra-chave Break em uma 
      instrução Trap:

          C:\PS> function break_example {
              trap {"Erro interceptado"; break;}
              1/$null
              "Função concluída."
              }

          C:\PS> break_example
          Erro interceptado
          Tentativa de divisão por zero.
          At line:4 char:7


      Como a instrução Trap inclui a palavra-chave Break, a função 
      não continua em execução, e a linha "Função concluída" não é 
      executada.


      Se você incluir uma instrução Continue em uma instrução Trap, o 
      Windows PowerShell continuará depois da instrução que causou o 
      erro, da mesma forma que faria sem Break ou Continue. No 
      entanto, com a palavra-chave Continue, o Windows PowerShell não 
      gravará um erro no fluxo de erros. 


      A função de exemplo a seguir usa a palavra-chave Continue em 
      uma instrução Trap:

          C:\PS> function continue_example {
              trap {"Erro interceptado"; continue;} 1/$null
              "Função concluída."}

          C:\PS> continue_example
          Erro interceptado
          Função concluída. 


      A função continua depois que o erro é interceptado, e a 
      instrução "Função concluída" é executada. Nenhum erro é gravado 
      no fluxo de erros. 


CONSULTE TAMBÉM
    about_Break
    about_Continue
    about_Throw
    about_Try_Catch_Finally
    about_Scopes