You are on page 1of 5

DESCRIPCI�N BREVE

Describe una palabra clave que controla un error de terminaci�n.

DESCRIPCI�N DETALLADA
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 en la canalizaci�n actual. En otros lenguajes, como C#,
los errores de terminaci�n reciben el nombre de excepciones.

La palabra clave Trap especifica una lista de instrucciones que


se han de ejecutar cuando se produce un error de terminaci�n. Las
instrucciones Trap controlan los errores de terminaci�n y
permiten que la ejecuci�n del script o funci�n contin�e en lugar
de detenerse.

Sintaxis

La instrucci�n Trap tiene la sintaxis siguiente:

trap [[<tipo de error>]] {<lista de instrucciones>}

La instrucci�n Trap incluye una lista de instrucciones para


ejecutarse cuando se produce un error de terminaci�n.
Opcionalmente, la palabra clave Trap puede especificar un tipo
de error. Un tipo de error requiere corchetes.

Un script o comando puede tener varias instrucciones Trap. Las


instrucciones Trap pueden aparecer en cualquier parte del
script o comando.

Interceptar todos los errores de terminaci�n

Cuando se produce un error de terminaci�n que no est�


controlado de otra manera en un script o comando, Windows
PowerShell busca una instrucci�n Trap que controle el error. Si
hay una instrucci�n Trap, Windows PowerShell contin�a
ejecutando el script o comando en la instrucci�n Trap.

El ejemplo siguiente es una instrucci�n Trap muy simple:

trap {"Error detectado."}

Esta instrucci�n Trap intercepta cualquier error de


terminaci�n. El ejemplo siguiente es una funci�n que contiene
esta instrucci�n Trap:

function TrapTest {
trap {"Error detectado."}
cadenaSinSentido
}
Esta funci�n incluye una cadena "sin sentido" que produce un
error. La ejecuci�n de esta funci�n devuelve lo siguiente:

C:\PS> TrapTest
Error detectado.

El ejemplo siguiente incluye una instrucci�n Trap que muestra


el error utilizando la variable autom�tica $_:

function TrapTest {
trap {"Error detectado: $_"}
cadenaSinSentido
}

La ejecuci�n de esta versi�n de la funci�n devuelve lo siguiente:

C:\PS> TrapTest
Error detectado: El t�rmino 'cadenaSinSentido' no se
reconoce como nombre de un cmdlet, funci�n, archivo de
script o programa ejecutable. Compruebe si escribi�
correctamente el nombre o, si incluy� una ruta de acceso,
compruebe que dicha ruta es correcta e int�ntelo de nuevo.

Las instrucciones Trap pueden ser tambi�n m�s complejas. Una


instrucci�n Trap puede incluir varias condiciones o llamadas a
funciones. Puede registrar, probar o incluso ejecutar otro programa.

Interceptar errores de terminaci�n especificados

El ejemplo siguiente es una instrucci�n Trap que intercepta el


tipo de error CommandNotFoundException:

trap [System.Management.Automation.CommandNotFoundException]
{"Error de comando interceptado"}

Cuando una funci�n o script encuentra una cadena que no


coincide con un comando conocido, esta instrucci�n Trap muestra
la cadena "Error de comando interceptado". Despu�s de ejecutar
cualquier instrucci�n de la lista de instrucciones Trap,
Windows PowerShell escribe el objeto de error en la secuencia
de error y, a continuaci�n, contin�a el script.

Windows PowerShell utiliza los tipos de excepci�n de Microsoft


.NET Framework. El ejemplo siguiente especifica el tipo de
error System.Exception:

trap [System.Exception] {"Error interceptado"}

El tipo de error CommandNotFoundException se hereda del tipo


System.Exception. Esta instrucci�n intercepta un error creado
por un comando desconocido. Tambi�n intercepta otros tipos de error.

Se puede tener m�s de una instrucci�n Trap en un script. Cada


error puede ser interceptado por s�lo una instrucci�n Trap. Si
se produce un error y hay m�s de una instrucci�n Trap
disponible, Windows PowerShell utiliza la instrucci�n Trap con
el tipo de error m�s representativo que coincide con el error.

El ejemplo de script siguiente contiene un error. El script


incluye una instrucci�n Trap general que intercepta cualquier
error de terminaci�n y una instrucci�n Trap concreta que
especifica el tipo CommandNotFoundException.

trap {"Otro error de terminaci�n interceptado" } trap


[System.Management.Automation.CommandNotFoundException] {"Error de
terminaci�n interceptado"} cadenaSinSentido

La ejecuci�n de este script produce el resultado siguiente:

Error de comando interceptado


El t�rmino 'cadenaSinSentido' no se reconoce como nombre de
un cmdlet, funci�n, archivo de script o programa
ejecutable. Compruebe si escribi� correctamente el nombre
o, si incluy� una ruta de acceso, compruebe que dicha ruta
es correcta e int�ntelo de nuevo.
En C:\PS>testScript1.ps1:3 Car�cter:19
+ cadenaSinSentido <<<<

Dado que Windows PowerShell no reconoce "cadenaSinSentido" como


un cmdlet u otro elemento, devuelve un error de tipo
CommandNotFoundException. Este error de terminaci�n lo
intercepta la instrucci�n Trap espec�fica.

El ejemplo de script siguiente contiene las mismas


instrucciones Trap con un error diferente:

trap {"Otro error de terminaci�n interceptado" } trap


[System.Management.Automation.CommandNotFoundException]
{"Error de comando interceptado"}
1/$null

La ejecuci�n de este script produce el resultado siguiente:

Otro error de terminaci�n interceptado


Intento de dividir por cero.
En C:PS> errorX.ps1:3 Car�cter:7
+ 1/ <<<< $null

El intento de dividir por cero no crea un error de tipo


CommandNotFoundException, sino que ese error es interceptado
por la otra instrucci�n Trap, que intercepta cualquier error de
terminaci�n.
Interceptar errores y �mbito

Si un error de terminaci�n se produce en el mismo �mbito que la


instrucci�n Trap, despu�s de ejecutarse las instrucciones Trap,
Windows PowerShell contin�a en la instrucci�n despu�s del
error. Si la instrucci�n Trap est� en un �mbito diferente del
�mbito del error, la ejecuci�n contin�a en la siguiente
instrucci�n que est� en el mismo �mbito que el de la
instrucci�n Trap.

Por ejemplo, si se produce un error en una funci�n y la


instrucci�n Trap est� en la funci�n, el script contin�a en la
siguiente instrucci�n. Por ejemplo, el script siguiente
contiene un error y una instrucci�n Trap:

function funci�n1 {
trap { "Un error: " }
CadenaSinSentido
"funci�n1 completada"
}

M�s adelante en el script, la ejecuci�n de la funci�n funci�n1


produce el resultado siguiente:

funci�n1
Un error:
El t�rmino 'CadenaSinSentido' no se reconoce como nombre de
un cmdlet, funci�n, archivo de script o programa
ejecutable. Compruebe si escribi� correctamente el nombre
o, si incluy� una ruta de acceso, compruebe que dicha ruta
es correcta e int�ntelo de nuevo.
En C:\PS>TestScript1.ps1:3 Car�cter:19
+ CadenaSinSentido <<<<

funci�n1 completada

La instrucci�n Trap en la funci�n intercepta el error. Despu�s


de mostrarse el mensaje, Windows PowerShell reanuda la
ejecuci�n de la funci�n. Observe que la funci�n funci�n1 se
complet�.

Compare esto con el ejemplo siguiente, que tiene el mismo error


y la misma instrucci�n Trap. En este ejemplo, la instrucci�n
Trap se produce fuera de la funci�n:

function funci�n2 {
CadenaSinSentido
"funci�n2 completada"
}

trap { "Un error: " }


. . .
funci�n2
M�s adelante en el script, la ejecuci�n de la funci�n funci�n2
produce el resultado siguiente:

Un error:
El t�rmino 'CadenaSinSentido' no se reconoce como nombre de
un cmdlet, funci�n, archivo de script o programa
ejecutable. Compruebe si escribi� correctamente el nombre
o, si incluy� una ruta de acceso, compruebe que dicha ruta
es correcta e int�ntelo de nuevo.
En C:\PS>TestScript2.ps1:4 Car�cter:19
+ CadenaSinSentido <<<<

En este ejemplo, no se ejecut� el comando "funci�n2


completada". Aunque ambos errores de terminaci�n se producen
dentro de una funci�n, si la instrucci�n Trap est� fuera de la
funci�n, Windows PowerShell no vuelve a ella despu�s de
ejecutarse la instrucci�n Trap.

Utilizar las palabras clave Break y Continue

Puede utilizar las palabras clave Break y Continue en una


instrucci�n Trap para determinar si un script o comando
contin�a ejecut�ndose despu�s de un error de terminaci�n.

Si incluye una instrucci�n Break en una lista de instrucciones


Trap, Windows PowerShell detiene la funci�n o script. La
funci�n de ejemplo siguiente utiliza la palabra clave Break en
una instrucci�n Trap:

C:\PS> function break_example {


trap {"Error interceptado"; break;}
1/$null
"Funci�n completada."
}

C:\PS> break_example
Error interceptado
Intento de dividir por cero.
En l�nea:4 Car�cter:7

Como la instrucci�n Trap incluye la palabra clave Break, la


funci�n no contin�a ejecut�ndose y la l�nea " Funci�n
completada" no se ejecuta.

You might also like