- 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 Trap
declaració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 Finally
keywords 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 Catch
apropiado.
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 Catch
maneja 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 Catch
bloquear.,
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 Catch
para 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
Deja una respuesta