PowerShell es uno de los lenguajes de scripting más populares del mundo y se utiliza a menudo para automatizar tareas que, de otro modo, consumirían mucho tiempo y esfuerzo. Construido sobre el Common Language Runtime (CLR) de .NET, puedes encontrar y filtrar toda la información que necesitas y utilizarlas para gestionar los sistemas de forma eficiente.
Como administrador de PowerShell, es probable que ejecutes diferentes scripts en distintos momentos del día para ejecutar todas las tareas repetitivas. Muchas veces, esto puede resultar abrumador y siempre existe la posibilidad de que se pierda la ejecución de un script en un momento determinado y, a su vez, esto podría tener un grave impacto en tus sistemas.
Para evitar estas molestias, puedes programar los scripts de PowerShell con antelación, para que se ejecuten automáticamente en el momento adecuado.
En este artículo, te mostraré las diferentes formas de programar los scripts de PowerShell.
Utilizar el Programador de Tareas para Programar los Scripts de PowerShell
El uso del programador de tareas es una de las formas más sencillas de programar scripts de PowerShell.
Para ello:
- Haz clic con el botón derecho del mouse en el botón Inicio y elige “Ejecutar“.
- En el cuadro de diálogo, escribe “
taskschd.msc
” y pulsa Intro. Esto abre el Programador de Tareas. También puedes acceder a él a través de la opción Herramientas Administrativas de tu Panel de Control. - En la ventana del Programador de Tareas, busca la Biblioteca del Programador de Tareas en el panel izquierdo. Haz clic con el botón derecho del mouse y, en el menú, selecciona “Crear tarea“.
Verás muchas pestañas en la ventana de tareas, así que vamos a repasar cada una de ellas en detalle.
Pestaña general
En la pestaña General, asigna un nombre a la tarea y dale una descripción para que otros puedan identificar fácilmente tu propósito más adelante.
Mira más abajo y verás algunas opciones de seguridad. En primer lugar, decide si el usuario debe estar conectado para ejecutar esta tarea. Habilitar esta opción te ayuda a rastrear quién ha iniciado una tarea y te da un registro del acceso del usuario.
La otra opción de seguridad es decidir si una tarea requiere los más altos privilegios. De nuevo, esto forma parte del control de acceso de los usuarios.
Pestaña de desencadenadores
La pestaña de desencadenadores (trigger) estará vacía cuando la abras por primera vez.
Haz clic en el botón “Nuevo” de la parte inferior para crear un nuevo desencadenador. En la nueva ventana, elige la frecuencia, la fecha de inicio, la fecha de finalización, etc.
Una opción importante es la de “Iniciar la tarea:”. Aquí, elige si quieres que se ejecute en un horario, en el momento del inicio, o en cualquier otro desencadenante de evento predeterminado. Simplemente elige en el cuadro desplegable.
También hay algunas otras configuraciones avanzadas como retrasos, repeticiones, caducidad, y más. Elige las opciones en función de tus necesidades.
Pestaña de acciones
La pestaña Acciones también estará vacía cuando la abras por primera vez. Haz clic en el botón “Nuevo“. Elige “powershell.exe
” para la opción Programa/Script.
La ruta completa es:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
También tienes otras opciones y puedes decidir cuándo debe iniciarse el programa, dónde debe iniciarse y los argumentos opcionales que sean necesarios. En la opción “Agregar argumentos“, elige tu script.
Pestaña de Condiciones y Configuración
Las pestañas de Condiciones y Configuración contienen un montón de opciones relacionadas con el inicio y la detención de las tareas y el manejo de errores. Examina estas opciones y elige las que necesites.
Haz clic en Aceptar y tu tarea ya está programada. Para ver o cambiar la configuración de tu tarea, abre el administrador de tareas, navega hasta la tarea, haz clic con el botón derecho y cambia o visualiza.
Utilizar PowerShell
La segunda opción es utilizar los cmdlets de PowerShell para programar estos scripts.
Esta es una buena alternativa al uso de una GUI, especialmente si te sientes cómodo usando PowerShell.
La programación de scripts de PowerShell mediante cmdlets tiene tres pasos distintos, que se explican a continuación.
Fijar la hora
Como primer paso, decide la hora de inicio y la frecuencia de una tarea. Por ejemplo, puedes programar una tarea para que se inicie a las 9 de la mañana todos los días.
Para ello, utiliza el cmdlet New-ScheduledTaskTrigger
. El código para la programación anterior es
$horaProgramada=New-ScheduledTaskTrigger -At 9.00AM -Daily
El comando de arriba crea un disparador de tarea programada que inicia la tarea diariamente a las 9:00 A . M. Y asigna el objeto ScheduledTaskTrigger
a la variable $horaProgramada
.
Este cmdlet tiene muchos parámetros como,
- [-RandomDelay <TimeSpan>]
- -At <DateTime>
- [-Once]
- [-RepetitionDuration <TimeSpan>]
- [-RepetitionInterval <TimeSpan>]
- [-CimSession <CimSession[]>]
- [-ThrottleLimit <Int32>]
- [-AsJob]
- [<CommonParameters>]
Utiliza estos parámetros para programar una tarea de la forma que desees.
Establecer las acciones
New-ScheduledTaskAction
es el cmdlet para establecer las acciones de una tarea, y puedes programar hasta 32 tareas con él. Sin embargo, las tareas se ejecutarán una tras otra y no hay ejecución paralela.
Utiliza este cmdlet para crear nuevas tareas.
Por ejemplo,
New-ScheduledTaskAction -Execute "PowerShell.exe"
El código anterior abre PowerShell.exe
$accionProgramada = New-ScheduledTaskAction -Execute "PowerShell.exe" -WorkingDirectory C:/MisScripts
Este código abrirá PowerShell y cambiará el directorio a MisScripts
. Como puedes ver, las tareas se ejecutan secuencialmente.
Guardar el programador
Ahora que has definido la tarea y el momento en que debe ejecutarse, el paso final es guardar el programador en tu sistema local, para poder reutilizarlo o editarlo más adelante. Utiliza el cmdlet Register-ScheduledTask
para guardar tu programación.
Aunque tu tarea puede ejecutar cualquier tipo de archivo, ten en cuenta que este cmdlet no comprueba la compatibilidad con tu sistema operativo.
Register-ScheduledTask -TaskName "EjecutarMisScripts" -Trigger $horaProgramada -Action $accionProgramada
Esta tarea abrirá PowerShell y cambiará el directorio a “MisScripts” a las 9 AM cada día.
Por lo tanto, esta es otra forma de programar un script de PowerShell.
Acciones adicionales
Echemos ahora un vistazo a algunas acciones adicionales que puedes querer utilizar, como las copias de seguridad y los borrados.
Copia de seguridad
En PowerShell, no hay un cmdlet incorporado para hacer una copia de seguridad de una tarea programada, pero como todo se trata como un objeto, siempre se puede mover el objeto a un archivo para hacer una copia de seguridad.
Get-ScheduledTask -TaskName 'EjecutarMisScripts' | Export-Clixml c:\MisScripts.xml
En el ejemplo anterior, estás enviando una tarea a un archivo XML para hacer una copia de seguridad.
Eliminar una tarea
Para eliminar una tarea programada,
Unregister-ScheduledTask -TaskName 'EjecutarMisScripts' -Confirm:$true
Este cmdlet borrará la tarea después de confirmarla. Esta comprobación asegura que no elimines accidentalmente una tarea programada.
Palabras Finales
Para concluir, los scripts de PowerShell son la forma preferida de implementar la automatización porque son simples de programar y viene con cmdlets para hacer casi cualquier cosa que necesites.
Incluso puedes instruir al sistema para que ejecute automáticamente los scripts de PowerShell en momentos especificados utilizando una interfaz gráfica de usuario como un programador de tareas o a través de cmdlets de Powershell, dependiendo de tus preferencias personales.
¿Cuál de los dos métodos prefieres y por qué? Comparte tu opinión en la sección de comentarios.