Errores PowerShell: aprende a identificar cada uno de ellos

Errores PowerShell: aprende a identificar cada uno de ellos

David Onieva

Una vez hemos instalado Windows 10 por primera vez, nos encontramos con una buena cantidad de aplicaciones y funciones que ya vienen incluidas. Todo ello nos será de utilidad para empezar a trabajar desde el primer momento, además de para sacar todo el provecho al sistema operativo, como sucede con el Powershell.

Entre estas nos encontramos elementos tan importantes como el Explorador de archivos, el Panel de control, la aplicación de Configuración, o el Powershell. Además a todo ello debemos sumarle las aplicaciones UWP que nos encontramos de entrada. Pues bien, en estas líneas nos vamos a centrar en una de esas funciones importantes, el PowerShell. Este es un elemento bastante más potente que el Símbolo del sistema de Windows.

Como muchos sabréis, ambos se usan en base a una serie de comandos que nos permiten utilizar de un modo más efectivo y preciso el sistema operativo. Eso sí, debido a esa potencia de la que os hablamos, existe una mayor posibilidad de que se produzcan errores. Por tanto, si estamos trabajando en algún script y este falla repentinamente, es posible que no sepamos por dónde empezar a buscar. Es por todo ello que os vamos a enseñar a identificar los errores más comunes en este apartado.

Usa Powershell para aprovechar al máximo un sistema como Windows

En principio este elemento lo suelen utilizar usuarios algo más avanzados que ya conozcan los aspectos básicos y el manejo de errores aquí. Sin embargo hay algunos aspectos específicos de PowerShell que igualmente debemos conocer. Lo primero que debemos saber al enfrentarnos a un error en PowerShell, es lo que detiene el script en su ejecución.

Powershell

Si el fallo no afecta al resto, lo mejor que podemos hacer es indicar a PowerShell que lo ignore y siga adelante. Por otro lado, no siempre está claro cuando un “cmdlet” lanza un error de finalización. Algunos es estos “cmdlet” devuelven un error pero no detienen el script, lo que podríamos ignorar. Eso sí, debemos saber que aquí es donde entra en juego el parámetro “-ErrorAction”.

Decir que este se usa para forzar a un “cmdlet” a manejar el error tal y como nosotros queramos. Para que entre en funcionamiento, basta con que lo añadamos al final de la línea del “cmdlet”. Este es un claro ejemplo de ello: “Get-ChildItem -Path «~\Documents\*.jpg» -Recurse -ErrorAction Stop”.

Por ejemplo si con este comando deseamos hacer algo con los datos, con esto sabremos que la búsqueda falló y la razón de ello. Al mismo tiempo si hacemos múltiples búsquedas, cambiamos el parámetro de “Stop” a “SilentlyContinue” para que el script continúe si una de estas, falla.

Otros posibles errores en esta función

Decir que el parámetro “ErrorAction” aborda los errores de forma sencilla, pero si queremos un poco más de control sobre estos, podemos usar “Try/Catch”. Esto nos permitirá separar el script cuando los “cmdlet” nos devuelven un error. Este comando se divide en dos partes, la primera es donde vamos a ejecutar el código normalmente. Aquí aún podemos usar el parámetro -ErrorAction, pero solo se puede establecer como Stop. Sirva como ejemplo el comando “Try{Get-Process «Cortana» -ErrorAction Stop}”.

Fallos Powershell

Ahora que hemos creado un bloque de pruebas de “cmdlets”, si queremos definir qué hacer cuando falle, usamos la segunda parte, Catch. Por ejemplo, llegado el caso podemos recibir un mensaje de Proceso no encontrado, escribiendo “Catch{ Write-Host » Proceso no encontrado”}”.

Fallos Powershell

Para terminar con este apartado, si deseamos que algo se ejecute independientemente de si el “cmdlet” falla, o no, podemos usar Finally, que se añade después de Try y Catch.

Usar la variable de error en el Powershell de Windows

Ahora que sabemos cómo maneja los errores y cómo responde a ellos el script, podemos ir un paso más allá para saber qué ha fallado realmente con el parámetro “-ErrorVariable”. Y es que  los errores se escriben en una variable personalizada. Por tanto primero definimos una variable propia, por ejemplo “$SearchError”. Eso sí, cuando llamamos a esta variable en el comando “ErrorVariable”, ya no usamos el signo de dólar, y la añadimos al final de la línea.

“Get-ChildItem -Path «~\Documents\*.jpg» -Recurse -ErrorAction Continue -ErrorVariable SearchError”.

Cabe mencionar que si añadimos un signo + delante del nombre de la variable, podremos añadir otra en lugar de reemplazarla directamente. Por ejemplo en su lugar podemos usar esta salida y los comandos Try/Catch para escribir una salida personalizada, entre otras muchas cosas.

Esto lo que nos va a permitir es obtener un registro de cualquier error y realizar un seguimiento para que las cosas se ejecuten con éxito.