TEMA
    about_Try_Catch_Finally

DESCRIPCIÓN BREVE
    Describe cómo se usan los bloques Try, Catch y Finally para 
    controlar los errores de terminación.


DESCRIPCIÓN DETALLADA
    Utilice los bloques Try, Catch y Finally para responder a, o 
    controlar, los errores de terminación en scripts. La instrucción Trap 
    también se puede utilizar para controlar los errores de terminación 
    en scripts. Para obtener más información, vea about_Trap.


    Un error de terminación detiene la ejecución de una instrucción. 
    Si Windows PowerShell no controla un error de terminación de 
    algún modo, también se detendrá la ejecución de la función o 
    script que está utilizando la canalización actual. En otros 
    lenguajes, como C#, los errores de terminación reciben el nombre de 
    excepciones. Para obtener más información sobre los errores, vea 
    about_Errors.


    Utilice el bloque Try para definir una sección de un script en 
    que se desea que Windows PowerShell supervise los errores. Cuando 
    se produce un error dentro del bloque Try, se guarda primero en 
    la variable automática $Error. A continuación, Windows PowerShell 
    busca un bloque Catch para controlar el error. Si la instrucción 
    Try no tiene un bloque Catch correspondiente, Windows PowerShell 
    continúa buscando la instrucción Trap o el bloque Catch 
    apropiados en los ámbitos principales. Después de completarse un 
    bloque Catch o si no se encuentra ningún bloque Catch o 
    instrucción Trap apropiados, se ejecuta el bloque Finally. Si el 
    error no se puede controlar, se escribe en la secuencia de error.


    Un bloque Catch puede incluir comandos para realizar el 
    seguimiento del error o para recuperar el flujo esperado del 
    script. Además, puede especificar qué tipos de error detecta. Una 
    instrucción Try puede incluir varios bloques Catch para diferentes 
    tipos de errores.


    Un bloque Finally se puede utilizar para liberar los recursos que 
    el script ya no necesita. 


    Try, Catch y Finally son semejantes a las palabras clave Try, Catch y 
    Finally utilizadas en el lenguaje de programación C#.


  Sintaxis
      Una instrucción Try contiene un bloque Try, ninguno o varios 
      bloques Catch y ninguno o un bloque Finally. Además, debe tener 
      un bloque Catch o un bloque Finally por lo menos.


      A continuación se muestra la sintaxis del bloque Try:

          try {<lista de instrucciones>}


      Una palabra clave Try va seguida de una lista de instrucciones entre 
      llaves. Si se produce un error de terminación mientras se están 
      ejecutando las instrucciones de la lista de instrucciones, el script 
      pasará el objeto de error del bloque Try a un bloque Catch adecuado. 


      A continuación se muestra la sintaxis del bloque Catch: 

          catch [[<tipo de error>][',' <error type>]*] {<lista de 
          instrucciones>}


      Los tipos de error se muestran entre corchetes. Los corchetes 
      más externos indican que el elemento es opcional.


      La palabra clave Catch va seguida de una lista opcional de 
      especificaciones de tipo de error y una lista de instrucciones. Si se 
      produce un error de terminación en el bloque Try, Windows PowerShell 
      busca un bloque Catch adecuado. Si encuentra uno, se ejecutan las 
      instrucciones del citado bloque.


      El bloque Catch puede especificar uno o varios tipos de error. 
      Un tipo de error es una excepción de Microsoft .NET Framework o una 
      excepción derivada de una excepción de .NET Framework. Un bloque 
      Catch controla los errores de la clase de excepción de .NET Framework 
      especificada o de cualquier clase derivada de la clase especificada.


      Si un bloque Catch especifica un tipo de error, controla ese 
      tipo de error. Si un bloque Catch no especifica un tipo de 
      error, controla los errores encontrados en el bloque Try. Una 
      instrucción Try puede incluir varios bloques Catch para los 
      diferentes tipos de error especificados. 


      A continuación se muestra la sintaxis del bloque Finally:

          finally {<lista de instrucciones>}


      La palabra clave Finally va seguida de una lista de 
      instrucciones que se ejecuta cada vez que se ejecuta el script, 
      aunque la instrucción Try se haya ejecutado sin error o se haya 
      detectado un error en una instrucción Catch. 


      Observe que al presionar CTRL+C, se detiene la canalización. 
      Los objetos que se envían a la canalización no se mostrarán 
      como resultado. Por consiguiente, si incluye una instrucción 
      para que se muestre, como "El bloque Finally se ha ejecutado", no se 
      mostrará después de presionar CTRL+C, aunque se haya ejecutado el 
      bloque Finally.


  Detectar errores
      El script de ejemplo siguiente muestra un bloque Try con un 
      bloque Catch:

          try { CadenaSinSentido }
          catch { "Se ha producido un error." }


      La palabra clave Catch debe seguir inmediatamente al bloque Try 
      o a otro bloque Catch. 


      Windows PowerShell no reconoce "CadenaSinSentido" como cmdlet u otro 
      elemento. La ejecución de este script devuelve el resultado siguiente:

          Se ha producido un error.


      Cuando el script encuentra "CadenaSinSentido", se produce un 
      error de terminación. El bloque Catch controla el error 
      ejecutando la lista de instrucciones incluida en el bloque.


  Usar varias instrucciones Catch
      Una instrucción Try puede tener cualquier número de bloques 
      Catch. Por ejemplo, el script siguiente tiene un bloque Try que 
      descarga MyFile.doc y contiene dos bloques Catch:

          try
          {
             $wc = new-object System.Net.WebClient 
             $wc.DownloadFile("http://www.contoso.com/MyDoc.doc") }
          catch [System.Net.WebException],[System.IO.IOException] {
              "No se puede descargar MyDoc.doc de http://www.contoso.c
              om." }
          catch
          {
              "Se ha producido un error que no se puede resolver." }


      El primer bloque Catch controla los errores de los tipos de 
      excepción System.Net.WebException y System.IO.IOException. El 
      segundo bloque Catch no especifica un tipo de error. Este 
      segundo bloque controla los demás errores de terminación que se 
      producen.


      Windows PowerShell busca los tipos de error por herencia. Un 
      bloque Catch controla los errores de la clase de excepción de .NET 
      Framework especificada o de cualquier clase derivada de la clase 
      especificada. El ejemplo siguiente contiene un bloque Catch que 
      detecta un error de tipo "Comando no encontrado":

          catch [System.Management.Automation.CommandNotFoundException] 
          {"Excepción heredada" }


      El tipo de error especificado, CommandNotFoundException, se 
      hereda del tipo System.SystemException. El ejemplo siguiente también 
      detecta un error de tipo Comando no encontrado:

          catch [System.SystemException] {"Excepción base" }


      Este bloque Catch controla el error de tipo "Comando no 
      encontrado" y otros errores que se heredan del tipo SystemException.


      Si especifica una clase de error y una de sus clases derivadas, 
      coloque el bloque Catch correspondiente a la clase derivada 
      delante del bloque Catch correspondiente a la clase general.


  Liberar recursos usando Finally
      Para liberar los recursos utilizados por un script, agregue un 
      bloque Finally detrás de los bloques Catch y Try. Las 
      instrucciones del bloque Finally se ejecutan con independencia 
      de que el bloque Try encuentre un error de terminación. Windows 
      PowerShell ejecuta el bloque Finally antes de que el script 
      finalice o antes de que el bloque actual salga del ámbito. 


      Un bloque Finally se ejecuta aunque se utilice CTRL+C para 
      detener el script. También se ejecuta si una palabra clave Exit 
      detiene el script desde un bloque Catch.


VEA TAMBIÉN
    about_Errors
    about_Trap




Tabla de contenido