Está en la página 1de 4

TEMA

about_Try_Catch_Finally
DESCRIPCIN BREVE
Describe cmo se usan los bloques Try, Catch y Finally para
controlar los errores de terminacin.
DESCRIPCIN DETALLADA
Utilice los bloques Try, Catch y Finally para responder a, o
controlar, los errores de terminacin en scripts. La instruccin Trap
tambin se puede utilizar para controlar los errores de terminacin
en scripts. Para obtener ms informacin, vea about_Trap.
Un error de terminacin detiene la ejecucin de una instruccin.
Si Windows PowerShell no controla un error de terminacin de
algn modo, tambin se detendr la ejecucin de la funcin o
script que est utilizando la canalizacin actual. En otros
lenguajes, como C#, los errores de terminacin reciben el nombre de
excepciones. Para obtener ms informacin sobre los errores, vea
about_Errors.
Utilice el bloque Try para definir una seccin 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 automtica $Error. A continuacin, Windows PowerShell
busca un bloque Catch para controlar el error. Si la instruccin
Try no tiene un bloque Catch correspondiente, Windows PowerShell
contina buscando la instruccin Trap o el bloque Catch
apropiados en los mbitos principales. Despus de completarse un
bloque Catch o si no se encuentra ningn bloque Catch o
instruccin 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
seguimiento del error
script. Adems, puede
instruccin Try puede
tipos de errores.

incluir comandos para realizar el


o para recuperar el flujo esperado del
especificar qu tipos de error detecta. Una
incluir varios bloques Catch para diferentes

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 programacin C#.
Sintaxis
Una instruccin Try contiene un bloque Try, ninguno o varios
bloques Catch y ninguno o un bloque Finally. Adems, debe tener
un bloque Catch o un bloque Finally por lo menos.
A continuacin 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 terminacin mientras se estn
ejecutando las instrucciones de la lista de instrucciones, el script
pasar el objeto de error del bloque Try a un bloque Catch adecuado.
A continuacin 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
ms 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 terminacin 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 excepcin de Microsoft .NET Framework o una
excepcin derivada de una excepcin de .NET Framework. Un bloque
Catch controla los errores de la clase de excepcin 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
instruccin Try puede incluir varios bloques Catch para los
diferentes tipos de error especificados.
A continuacin 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 instruccin Try se haya ejecutado sin error o se haya
detectado un error en una instruccin Catch.
Observe que al presionar CTRL+C, se detiene la canalizacin.
Los objetos que se envan a la canalizacin no se mostrarn
como resultado. Por consiguiente, si incluye una instruccin
para que se muestre, como "El bloque Finally se ha ejecutado", no se
mostrar despus 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 ejecucin de este script devuelve el resultado siguiente:
Se ha producido un error.
Cuando el script encuentra "CadenaSinSentido", se produce un
error de terminacin. El bloque Catch controla el error
ejecutando la lista de instrucciones incluida en el bloque.
Usar varias instrucciones Catch
Una instruccin Try puede tener cualquier nmero 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
excepcin System.Net.WebException y System.IO.IOException. El
segundo bloque Catch no especifica un tipo de error. Este
segundo bloque controla los dems errores de terminacin que se
producen.
Windows PowerShell busca los tipos de error por herencia. Un
bloque Catch controla los errores de la clase de excepcin 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]
{"Excepcin heredada" }
El tipo de error especificado, CommandNotFoundException, se
hereda del tipo System.SystemException. El ejemplo siguiente tambin
detecta un error de tipo Comando no encontrado:

catch [System.SystemException] {"Excepcin 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 detrs de los bloques Catch y Try. Las
instrucciones del bloque Finally se ejecutan con independencia
de que el bloque Try encuentre un error de terminacin. 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. Tambin se ejecuta si una palabra clave Exit
detiene el script desde un bloque Catch.
VEA TAMBIN
about_Errors
about_Trap

También podría gustarte