You are on page 1of 4

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

You might also like