Anuncio

Como su nombre lo indica, PowerShell es mucho más poderoso que el símbolo del sistema estándar de Windows. Con ese poder viene una mayor posibilidad de errores confusos. Si su script falla repentinamente, es posible que no sepa dónde comenzar a buscar lo que salió mal. Aquí es donde el manejo de errores de PowerShell es útil.

Si está familiarizado con otros idiomas, probablemente conozca los conceptos básicos del manejo de errores, pero hay algunos aspectos específicos de PowerShell que deberá conocer. Hay cuatro partes en el manejo de errores en PowerShell: el parámetro Acción de error, los bloques Try / Catch, el parámetro Variable de error y el registro.

Error de PowerShell al manejar la manera fácil

El primer paso para manejar los errores de PowerShell es lidiar con algo que detiene su secuencia de comandos. Si la falla no afecta el resto de su script, podría ser mejor decirle a PowerShell que ignore los errores y continúe.

Por otro lado, no siempre está claro cuándo un cmdlet determinado arroja un error de terminación. Algunos cmdlets devuelven un error pero no detienen el script. Esto podría dejarlo esperando a que se complete su secuencia de comandos mientras genera tonterías.

Aquí es donde el -ErrorAction el parámetro entra. Utiliza esto para forzar a un cmdlet a manejar el error de la manera que quieras. Si está modificando un script existente, lo agrega al final de la línea del cmdlet.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop

Obviamente, si está utilizando el Get-ChildItem cmdlet por sí solo, este error no hace mucho por ti. Sin embargo, si desea hacer algo con los datos, sería bueno detener el script, para que sepa que la búsqueda falló y por qué. Alternativamente, si está haciendo múltiples búsquedas, cambie el parámetro de Detener a Silenciosamente Continuar, por lo que el script continúa si falla una búsqueda. Si desea ver cuál es el error, puede usar Seguir como el parámetro en su lugar.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction SilentlyContinue

Si prefiere tener la opción de controlar lo que sucede cada vez que se ejecuta su script, puede cambiarlo a Preguntar. Cuando su cmdlet llega a un obstáculo, le da opciones: si, Sí para todos, Comando Alto, Suspendero Ayuda.

Manejo simple de errores de PowerShell usando ErrorAction

Esta opción es un poco más flexible, pero significa que los errores hacen que su script espere su entrada. Eso está bien si estás usando PowerShell para enviar un correo electrónico Cómo enviar un correo electrónico con Windows PowerShell¿Quieres enviar un correo electrónico a la manera geek? A continuación, le indicamos cómo puede enviar un correo electrónico con Windows PowerShell. Lee mas o alguna otra tarea simple, pero puede que no sea algo que desee cuando ejecuta un proceso largo durante la noche.

Error de PowerShell al manejar la manera poderosa

los ErrorAction El parámetro aborda sus errores de una manera sencilla. Sin embargo, si está buscando un poco más de control sobre los errores, PowerShell aún lo tiene cubierto. Utilizando Trata de atraparlo, ahora podemos ramificar el script cuando los cmdlets devuelven un error.

Error al manejar en PowerShell usando try / catch

Como el nombre sugiere, Trata de atraparlo Se compone de dos partes. (Técnicamente hay un tercero, pero llegaremos a eso en un minuto). El primero es el Tratar sección. Vas a ejecutar tu código normal en esta sección. Todavía vas a usar el -ErrorAction parámetro, pero solo se puede establecer como Detener. Este indicador garantiza que su cmdlet active el Captura—Incluso si no tiene un error de terminación.

Pruebe {Get-Process "Cortana" -ErrorAction Stop. }

Try también puede evitar que otros cmdlets se ejecuten si la búsqueda falla. En este caso, si estaba enviando el Get-Process resultados a Detener el proceso, una búsqueda fallida evita que se ejecute el segundo cmdlet.

Entonces, ahora que ha creado un bloque de prueba de cmdlets, ¿qué desea hacer cuando falla? Utilizando la Captura mitad, vas a definir esto.

Catch {Write-Host "Proceso no encontrado" }

Como con el ErrorAction parámetro, cuando estás haciendo algo un poco más complejo Captura será útil para algo más que dar una falla de lenguaje simple, especialmente cuando haces algo un poco más complejo. (En el ejemplo anterior, el error se ve forzado al usar el nombre de la aplicación y no el nombre del proceso). Asegúrese de jugar con el Tratar bloque para crear una búsqueda / acción que necesita. Puedes usar el Captura bloquee su script para enviarle un correo electrónico si falla.

La tercera parte es útil si desea que algo se ejecute independientemente de si su cmdlet tiene éxito o no. Para esto, puede usar el Finalmente bloquear. Agregue esto después de Try and Catch e inicie sesión cuando finalice una sección de su script.

La variable de error y el registro

Su script ahora controla cómo maneja los errores y cómo responde a ellos. Puede usarlo como una tarea programada, o al menos ejecutarlo cuando no esté en su escritorio. Sin embargo, ¿cómo puede investigar un script fallido? Con el -ErrorVariable Los errores de su cmdlet se escriben en una variable personalizada.

Esta es una alternativa al sistema. $ Error variable, que contiene todos los errores de la sesión actual.

Su cmdlet necesita ser un poco más largo. Primero, defina una variable, algo como $ SearchError hará por el ejemplo. Cuando usted llama SearchError en el Error Variable parámetro, no utilizas el signo de dólar.

Aunque está llamando a una variable que creó, debido a la forma en que funciona el parámetro, lo llama sin el signo de dólar. Luego agregue eso al final de la línea.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Continuar -Error SearchErrorVariable

Si agrega un + delante del nombre de la variable, puede agregar a la variable en lugar de reemplazarla directamente. Eso le da el mismo comportamiento que la variable de error global. En su lugar, puede usar esta salida y Trata de atraparlo para escribir una salida personalizada y sellarla con el tiempo.

Registro de errores de PowerShell

Para que esto funcione, cree un archivo de texto justo después de establecer la variable de error. Haz esto con el Nuevo artículo cmdlet Es posible que desee utilizar el Preguntar opción para el ErrorAction parámetro. Esto le permite agregar a un registro existente cuando el Nuevo artículo El cmdlet falla.

$ SearchLog = New-Item "~ \ SearchLog.txt" -tipo de archivo -ErrorAction Inquire

Ahora cuando construyes tu Trata de atraparlo bloque, puedes usar el Captura para iniciar sesión en un archivo de texto. Tu usas Obtener la fecha para crear la marca de tiempo. El formato puede ser complicado, así que asegúrese de copiarlo del ejemplo.

Pruebe {Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError. } Captura {Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-aa-hh_mm_ss) Archivos no encontrados error devuelto: $ SearchError" }

Repita eso según sea necesario para todos sus cmdlets, y ahora tiene un buen registro de cualquier error. Si desea realizar un seguimiento de las cosas que se ejecutan correctamente, puede agregar una similar Agregar contenido al final de Tratar bloquear.

Este registro solo se ejecuta cuando su Tratar El cmdlet tiene éxito. Luego puede registrar sus errores y éxitos con marcas de tiempo. El registro ahora le permite saber todo lo que ha hecho su script, éxito o fracaso.

PowerShell no es su única opción

Si bien PowerShell es una herramienta útil para muchas tareas de Windows, puede ser difícil de aprender. Tampoco es adecuado para todo. Si está haciendo mantenimiento del sistema en su computadora o comprobar la integridad de un archivo, PowerShell es útil. Por otro lado, si está buscando ejecutar un script para descargar archivos de Internet o alguna tarea más general, tiene otras opciones.

Por ejemplo, si proviene de un entorno Unix o Linux, puede sentirse más cómodo usando el shell bash. Gracias al Subsistema de Windows para Linux, ahora puede usar fácilmente bash y otras herramientas de Linux en su computadora con Windows 10. Si eso te parece perfecto, no busques más que nuestra guía de conseguir que bash shell se ejecute en Windows 10 Cómo obtener Linux Bash Shell en Windows 10¿Necesita usar Linux sin tiempo para cambiar a una PC diferente o ejecutar una VM? ¡Ejecute Linux en Windows 10 con un terminal de shell Bash en su lugar! Lee mas .

Kris Wouk es escritor, músico y como se llame cuando alguien hace videos para la web.