Sigue leyendo si quieres aprender cómo crear programación de tareas con Script PowerShell para poder gestionar la ejecución de tus scripts de manera programada.
Muchos de nosotros, por un motivo u otro, terminamos necesitando programar tareas para conseguir que se ejecuten de manera automática cada cierto tiempo (por ejemplo, cada X horas, cada día, cada semana, etc.).
Es algo a lo que recurrimos para poder aliviar nuestra carga de trabajo como administradores o simplemente para no tener que recordar hacer ciertas tareas que no consideramos de gran importancia, o que, pese a ser de gran importancia nos resultan tediosas, repetitivas, o execrables de alguna manera.
Usualmente se utiliza el programador de tareas de manera manual, a través del entorno gráfico comúnmente llamado GUI (Graphic User Interface), pero como ya sabemos, aquí somos muy amigos de ahorrar tiempo usando elementos como PowerShell, que nos permite hacer este tipo de tareas de manera rápida y fácil.
Supongamos, por ejemplo, que queremos consultar el estado de los discos de nuestro servidor una vez a la semana para ver que no hay problemas, que no hay errores ni peligro de que fallen, y queremos hacerlo los lunes a las 15:45 horas (por ejemplo).
En este artículo solo nos centraremos en la parte de la programación, por lo que se recomienda consultar el artículo Cómo ver los discos que tienen errores mediante script de PowerShell para tener clara la parte de la monitorización de discos, aunque como es lógico, se puede aplicar casi cualquier script de PowerShell.
Programando la ejecución de un script de PowerShell a través de la consola de PowerShell:
NOTA: En este artículo suponemos que el lector quiere dar de alta la tarea en un servidor o un cliente más o menos actuales, por lo que vamos a trabajar con el cmdlet “New-ScheduledTaskTrigger”. En caso de querer trabajar con sistemas operativos con PowerShell 2.0 se debe trabajar con el cmdlet “TaskScheduler”, que opera de otra manera.
Lo primero que debemos hacer es crear un archivo con extensión “.ps1” en una ruta accesible para el usuario que va a crear y ejecutar la tarea. En mi caso, la ruta será «C:\Data\” y el ejecutable será “MonitorDiscosServidor.ps1», ya que seguimos con el ejemplo arriba descrito.
Dentro de ese archivo ejecutable introducimos el código del script de PowerShell que será lanzado mediante la ejecución programada, y personalmente recomendaría probar su ejecución, más que nada porque hoy, por ejemplo, me he vuelto loco depurando la programación de la tarea y el problema estaba en que al hacer copy/paste dentro del script se ha metido un caracter extraño que hacía fallar la ejecución.
A continuación debemos programar la tarea, y por desgracia, la primera vez que la programemos va a ser un poco largo de hacer, más que nada porque necesitamos acostumbrarnos a realizar estas tareas, pero después veremos lo rápido que es y el tiempo y la de errores que evitamos.
El script completo lo ponemos a continuación, explicando cada una de sus partes posteriormente:
$Programacion1= New-ScheduledTaskTrigger -Weekly -WeeksInterval 1 -DaysOfWeek Monday -At 2:40pm
$User= «administrador»
$Accion1= New-ScheduledTaskAction -Execute «PowerShell.exe» -Argument «C:\Data\MonitorDiscosServidor.ps1»
Register-ScheduledTask -TaskName «MonitorDiscosServidor» -Trigger $Programacion1 -User $User -Action $Accion1 -RunLevel Highest –Force
Donde:
- $Programacion1 representa la variable donde se da la información de cada cuánto tiempo se ejecuta el programa. Esta en realidad, se introduce posteriormente en el disparador de la tarea (trigger).
La programación tiene la forma:
New-ScheduledTaskTrigger -Weekly -WeeksInterval 1 -DaysOfWeek Monday -At 2:40pm
Donde:
- “New-ScheduledTaskTrigger”: define la creación de un nuevo disparador.
- -Weekly -WeeksInterval 1: Indica que se lanzará semanalmente, con una ejecución cada semana, si por ejemplo definiéramos “-Weekly -WeeksInterval 2” estaríamos diciendo que se ejecuta cada dos semanas.
- -DaysOfWeek Monday: En este caso decimos que se ejecutará cada lunes (Monday).
- -At 2:40pm: Y en este caso se dice que se ejecutará a las 2:40pm. Ojo al uso del “AM/PM).
Otro punto a tener en cuenta es con qué usuario se va a ejecutar, que en este caso lo programamos con el usuario “administrador”.
$User= «administrador»
Ahora revisaremos la parte de “Acción”:
$Accion1= New-ScheduledTaskAction -Execute «PowerShell.exe» -Argument «C:\Data\MonitorDiscosServidor.ps1»
Donde:
- $Accion1: Es la variable de lo que se va a ejecutar.
- New-ScheduledTaskAction: Es el cmdlet de nueva tarea programada, y a continuación se ponen los parámetros a ejecutar.
- -Execute «PowerShell.exe»: Lo que ejecuta es el comando PowerShell.
- -Argument «C:\Data\MonitorDiscosServidor.ps1»: Pasando como argumentos la ruta del script con extensión “.ps1”. Es importante poner la ruta absoluta para evitar problemas.
En este punto, pasamos a revisar el comando de registro de la tarea programada:
Register-ScheduledTask -TaskName «MonitorDiscosServidor» -Trigger $Programacion1 -User $User -Action $Accion1 -RunLevel Highest –Force
Donde:
- Register-ScheduledTask: Este es el cmdlet para el registro de la tarea
- -TaskName «MonitorDiscosServidor»: Le damos un nombre distintivo a la tarea.
- -Trigger $Programacion1: En este momento se pasa el disparador con la variable declarada previamente y que ya hemos explicado.
- -User $User: Proporcionamos el usuario que ejecutará la tarea.
- -Action $Accion1: Proporcionamos la acción a ejecutar y que viene declarada por la variable declarada previamente y que ya hemos explicado.
- -RunLevel Highest: Lanzamos la tarea a alto nivel.
- –Force: Forzamos la ejecución.
Como siempre, recomiendo usar PowerShell ISE (Editor de desarrollo de PowerShell) ya que nos permitirá trastear con los comandos, probar y depurar.
Cuando lo tengamos todo claro, tocará lanzar los comandos y, si todo va bien, podremos ver mensajes en la consola como los que se muestran en la captura.
Tocará esperar un rato hasta la hora programada, que personalmente también recomiendo programar una prueba, inicialmente para dentro de 5 minutos (por ejemplo) para poder comprobar la ejecución.
Y tras la ejecución, se recomienda hacer la comprobación de que está todo como esperábamos, depurando aquello que sea necesario.
NOTA: En caso de que haya quedado alguna duda o se quiera ampliar la información sobre los cmdlets que hemos usado, se puede consultar la ayuda de consola de PowerShell (que usa un sistema parecido al MAN de UNIX), o la Web de New-ScheduledTaskTrigger.
Conclusiones y próximos pasos:
El proceso descrito en este artículo, cómo crear programación de tareas con Script PowerShell, permite realizar configuraciones de tareas programadas con comandos de PowerShell, y en este caso, siendo un poco redundantes, lanzando scripts de PowerShell.
La creación y ejecución se realiza en muy pocos pasos, tal como se ha podido ver en este artículo. Puedes aprender otras cosas sobre PowerShell consultando nuestro blog.
Esperamos que con esta pequeña guía no tengas problemas, pero si los tuvieras, no dudes en contactar con nosotros para que podamos echarte una mano.
¡Gracias por tu confianza!