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

BREVE DESCRIPCIÓN

se Describe cómo utilizar la etiqueta Try, Catch y Finally bloques para handleterminating errores.,

descripción larga

Use Try, Catch, y Finally bloques para responder o manejar errores de terminación en scripts. La instrucción Trap también se puede usar para manejar terminatingerrors en scripts. Para obtener más información, consulte about_Trap.

un error de terminación detiene la ejecución de una instrucción. Si PowerShell no controla un error de terminación de alguna manera, PowerShell también deja de ejecutar la función o el script utilizando la canalización actual., En otros lenguajes,como C#, Los errores de terminación se denominan excepciones.

utilice el bloque Try para definir una sección de un script en la que desee que PowerShell supervise los errores. Cuando se produce un error dentro del bloque Try, el error se guarda primero en la variable automática $Error. PowerShell busca un bloque Catch para gestionar el error., Si la instrucción Try no tiene un bloque coincidente Catch, PowerShell continúa buscando una instrucción apropiada Catch o Trap en los ámbitos principales. Después de unCatch bloque está completa o si no de Catch bloquear o Trapdeclaración se encuentra, el Finally bloque se ejecuta. Si el error no se puede manejar,el error se escribe en la secuencia de errores.,

a Catch el bloque puede incluir comandos para rastrear el error o para recuperar el flujo esperado del script. Un bloque Catch puede especificar qué tipo de error detecta. Una instrucción Try puede incluir varios bloques Catch para diferentes tipos de errores.

a Finally el bloque se puede usar para liberar cualquier recurso que ya no necesite su 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.,

lo siguiente muestra la sintaxis del bloque Try:

try {<statement list>}

la palabra clave Try va seguida de una lista de instrucciones entre llaves. Si se produce un terminatingerror mientras se ejecutan las instrucciones de la lista de instrucciones, thescript pasa el objeto error del bloque Try a un bloque Catchapropiado.

lo siguiente muestra la sintaxis del bloque Catch:

catch *] {<statement list>}

Los tipos de Error aparecen entre paréntesis., Los corchetes más externos indican el elemento isoptional.

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 bloqueTry, PowerShell busca el bloque Catch adecuado. Si se encuentra One, se ejecutan las sentencias en el bloque Catch.

el bloque Catch puede especificar uno o más tipos de error. Un tipo de error es la excepción de aMicrosoft. NET Framework o una excepción que se deriva de a .,Excepción NETFramework. Un bloque Catch maneja los errores de lo especificado .NetFramework exception class o de cualquier clase que derive de la clase especificada.

Si un bloqueCatch especifica un tipo de error, ese bloqueCatch maneja ese tipo de error. Si un bloque Catch no especifica un tipo de error, ese bloque Catchmaneja cualquier error encontrado en el bloque Try., Una instrucción Try puede incluir varios bloques Catch para los diferentes tipos de error especificados.

lo siguiente muestra la sintaxis del bloque Finally:

finally {<statement list>}

la palabra clave Finally va seguida de una lista de instrucciones que se ejecuta cada vez que se ejecuta thescript, incluso si la Try la instrucción se ejecutó sin error o un error wascaught en una instrucción Catch.

tenga en cuenta 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 salida. Por lo tanto, si incluye una instrucción que se mostrará, como «Finally block has run», no se mostrará después de presionar CTRL+C, incluso si se ejecutó el bloqueFinally.

la CAPTURA de ERRORES

El siguiente script de ejemplo muestra un Try bloque Catch bloque:

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

El Catch palabra clave debe seguir inmediatamente a la Try bloque o de otro Catchbloquear.,

PowerShell no reconoce «NonsenseString» como un cmdlet u otro elemento.Ejecutar este script devuelve el siguiente resultado:

An error occurred.

Cuando el script encuentra «NonsenseString», causa un error de terminación. El bloqueCatch maneja el error ejecutando la lista de instrucciones dentro del bloque.

usando múltiples declaraciones de captura

a Try la declaración puede tener cualquier número de bloques Catch., Por ejemplo, el siguiente script tiene un bloque Try que descarga MyDoc.doc, y contiene dos bloques Catch:

el primer bloque Catch maneja errores del sistema.Net tipos.WebException ysystem.Io.IOException. El segundo bloque Catch no especifica el tipo anerror. El segundo bloque Catch maneja cualquier otro error de terminación que ocurra.

PowerShell coincide con los tipos de error por herencia. Un bloqueCatch maneja errores del especificado .,NET Framework exception class o de cualquier clase que derive de la clase especificada. El siguiente ejemplo contiene un bloque Catch que captura un error «Command Not Found»:

catch {"Inherited Exception" }

El tipo de error especificado, CommandNotFoundException, hereda del sistema.Tipo SystemException. El siguiente ejemplo también detecta un error CommandNot Found:

catch {"Base Exception" }

This Catch block maneja el error» Command Not Found » y otros errores que herit del tipo SystemException.,

si especifica una clase de error y una de sus clases derivadas, coloque el bloque Catchpara la clase derivada antes del bloque Catch para la clase general.

usar trampas en un intento de captura

Cuando se produce un error de terminación en un bloque Try con un bloque Trap definido dentro del bloque Try, incluso si hay una coincidencia Catch block, el Trap statementtakes control.,

si un Trap existe en un bloque más alto que el Try, y no hay coincidenciaCatch bloque dentro del alcance actual, el Trap tomará el control, incluso si el ámbito tiene un bloque Catch coincidente.

acceder a la información de excepción

dentro de un bloque Catch, se puede acceder al error actual utilizando $_, que también se conoce como $PSItem. El objeto es de tipo ErrorRecord.,

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

al ejecutar este script se obtiene el siguiente 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.

Hay propiedades adicionales a las que se puede acceder, como ScriptStackTrace,Exception y ErrorDetails. Por ejemplo, si cambiamos el script por el siguiente:

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

El resultado será similar a:

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

liberando recursos usando finalmente

para liberar recursos utilizados por un script, agregue un bloque Finally después de los bloques Try yCatch., Las instrucciones de bloque Finally se ejecutan independientemente de si el bloqueTry encuentra un error de terminación. PowerShell ejecuta el bloque Finally antes de que finalice el script o antes de que el bloque actual salga del ámbito.

a Finally el bloque se ejecuta incluso si usa CTRL + C para detener el script. Un bloque Finally también se ejecuta si una palabra clave Exit detiene el script fromwithin un bloque Catch.,

VÉASE TAMBIÉN

about_Break

about_Continue

about_Scopes

about_Throw

about_Trap