PowerShell para administradores
¿Quieres utilizar PowerShell de forma más avanzada? Con este curso de PowerShell para administradores dominarás el uso de...
Aprende a programar tareas con la terminal de Windows, aprovechando sus bondades para automatizar tus sistemas y hacer que se ejecuten cuando lo necesites.
Seguramente ya tienes un programa en mente que deseas que se ejecute en un momento específico o un script que lleva a cabo acciones procedurales que tienes que estar ejecutando manualmente. ¡Lamentable! ¿No?
Tampoco es el fin del mundo, pero estoy seguro que creando tareas programadas te liberarás muchísimo tiempo y responsabilidades que podrías delegar al ordenador, que, si en algo es bueno, es para seguir instrucciones, y, por supuesto, como de momento no tienen conciencia y la inteligencia artificial no ha avanzado hasta tal punto, todavía somos nosotros los que les dominamos y podemos programarlos.
Es que tengas que despertarte en horas de la madrugada a hacer backups diarios de una base de datos a una hora específica de forma manual.
Es que tú tengas que detectar la falla y no tengas un agente que lo haga por tí, e incluso, que lo pueda solventar.
Es que tengas que activar servicios después de un reinicio de la máquina de forma manual.
Es que un correo llegue tarde por algún contratiempo que hayas tenido.
Es que la campaña en las redes sociales se publique en una hora no deseada porque nos manejamos en cierto desorden.
Es la dependencia total de tu mano de obra, incluso cuando tú eres tu propio jefe. ¡Oops!
Creo que se entiende por donde va el objetivo de aprender a gestionar tareas programadas. Si te identificaste en alguno de los escenarios anteriores, tienes una gran oportunidad para cambiarlo y probar esta experiencia a la que te invito en gran medida.
Por supuesto, la herramienta que te enseñaré a usar será Programador de tareas
de Windows. Dicha utilidad tiene interfaz integrada y a su vez el modo de uso por medio de comandos, instrucciones que se ejecutan por medio de la terminal del sistema operativo.
El tema con esto es que Windows tiene de forma nativa 2 terminales, que son el CMD
(llamada también de diferentes maneras, como Símbolo del sistema, Terminal, Consola, entre otros) y PowerShell
; otra que se está popularizando es Windows Terminal
, pero que no es nativa.
No es un secreto que el CMD es un derivado del llamado MS-DOS ya que comparte muchas características y es el centro de comandos de Windows, por ende, se le considera la primera opción para resolver temas en línea de comandos.
Si algo de lo anterior no lo acabas de comprender bien, te dejo por acá un maravilloso artículo sobre Shell Scripting en Sistemas Windows, que estoy seguro, te encantará.
Después está el PowerShell
que viene siendo una solución de las más potentes ahora en día para un mejor control del sistema, desde manejar servicios hasta temas de networking y demás. Lo que me hace recordar un excelente curso impartido por un crack en la materia y experto en sistemas, Manuel Domínguez con el curso de PowerShell para principiantes.
El último que comenté, Windows Terminal
, es una solución más práctica en el modo de uso de la aplicación, pero con los mismos comandos del CMD, así que este es el homólogo al Símbolo del Sistema.
En la actualidad la utilidad en modo de comandos para programar tareas es: schtasks
(Una combinación entre las palabras, Schedule Task = Programador de tareas). Sin embargo, también existe el comando AT
.
AT
Puede usar el comando AT para programar un comando, un script o un programa para que se ejecute en una fecha y hora especificadas. También puede usar este comando para ver las tareas programadas existentes.
Digo en la actualidad por que en versiones anteriores a Windows 10 el comando AT está en desuso, de hecho, la misma consola lo dice si tú pruebas la instrucción:
> AT /?
El comando AT está desusado. Use en su lugar schtasks.exe.
El comando AT programa la ejecución de comandos y programas en un equipo a
una hora y fecha especificadas. El servicio de programación debe estar en
ejecución para utilizar el comando AT.
Como sé que en la red hay mucho contenido alrededor de este comando, ya que, si tienes un sistema operativo anterior a Windows 10 que aún brinda soporte a este comando, perfectamente lo puedes usar y es por eso que te mostraré un ejemplo de cómo crear una tarea programada.
Para copiar todos los archivos de la carpeta documentos del disco local C:\
a otra unidad de disco J:\
específicamente a un directorio llamado MyDocs
, en medianoche, escriba la siguiente línea y, a continuación, presione ENTRAR:
at 00:00 cmd /c copy C:\Documents\*.* J:\MyDocs
Para cancelar una tarea programada ejecutar la siguiente instrucción:
at \\computername id /delete | /delete /yes
Para ver las listas programadas:
at
y, a continuación, presione Entrar.at \\support
y, a continuación, presione Entrar.at 18
y, a continuación, presione Entrar.En Windows 10, si ejecutas este comando tal cual, te saldrá el siguiente mansaje:
> at
El comando AT está desusado. Use en su lugar schtasks.exe.
Solicitud no compatible.
El objeto de mostrarte el uso de AT
es por discernir el modo de uso entre uno y otro, además, si es el caso de que estés usando una versión diferente a las construcciones de Windows 10, este comando te será válido.
Como hay que hacerle caso a la terminal, te mostraré cómo usar el SCHTASKS
.
SCHTASKS
Programa comandos y programas para que se ejecuten periódicamente o en un momento específico, agrega y elimina tareas del programa, inicia y detiene tareas a solicitud, muestra y cambia las tareas programadas. Este sin duda, es de las utilidades más potentes para aplicar temas de automatización.
Si el tema de automatización es lo que te llama la atención, en ese artículo profundizamos en Automatización de procesos con Shell Script Batch.
También puede acceder mediante interfaz gráfica con el comando: taskschd.msc
.
Parámetros principales
schtasks change
schtasks create
schtasks delete
schtasks end
schtasks query
schtasks run
Para todos estos comandos, está disponible el parámeto de ayuda, donde puedes documentarte del sinnúmero de argumentos que puedes utilizar.
schtasks /create /?
Entre todos los parámetros podemos encontrar uno de los más importantes /sc
que especifica el tipo de horario:
MINUTE: Especifica la cantidad de minutos antes de que se ejecute la tarea.
HOURLY: Especifica el número de horas antes de que se ejecute la tarea.
DAILY: Especifica el número de días antes de que se ejecute la tarea.
WEEKLY: Especifica el número de semanas antes de que se ejecute la tarea.
MONTHLY: Especifica el número de meses antes de que se ejecute la tarea.
ONCE: Especifica que esa tarea se ejecuta una vez en una fecha y hora específicas.
ONSTART: Especifica que la tarea se ejecuta cada vez que se inicia el sistema. Puede especificar una fecha de inicio o ejecutar la tarea la próxima vez que se inicie el sistema.
ONLOGON: Especifica que la tarea se ejecuta siempre que un usuario (cualquier usuario) inicia sesión. Puede especificar una fecha o ejecutar la tarea la próxima vez que el usuario inicie sesión.
ONIDLE: Especifica que la tarea se ejecuta siempre que el sistema está inactivo durante un período de tiempo específico. Puede especificar una fecha o ejecutar la tarea la próxima vez que el sistema esté inactivo.
Así como este, hay muchos más parámetros importantes como: /tn
, /tr
, /s
, /u
, etc. Todos estos se componen por modificadores, frecuencia y programación.
Crear tareas programadas
schtasks create
Crear una tarea programada con nombre OpenWebinarsSchedule
para que ejecute un script llamado program.vbs
dentro de la ruta C:\Users\OpenWebinars\Documents\program.exe
cada 30 minutos.
schtasks /create /sc minute /mo 30 /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\program.vbs
Este ejemplo es perfectamente aplicable en menor o mayor medida cuando tienes que eliminar caché o remover logs con menor nivel de seguridad pero que genera demasiados datos “inncesarios”.
Ahora piensa que tienes que hacer copias de seguridad de la base de la empresa, o bien, hacer recuperación si fuese el caso. Usualmente esto tienen tiempos definidos en la cual se debe aplicar. Lo que significa que podemos crear una tarea programada para que ejecute un proceso en medio de horas predeterminadas.
Las horas comunes para hacer copias de seguridad suele ser cuando los servicios que necesitan del sistema gestor de base de datos no están en uso. Por eso, en el siguiente ejemplo he señalado que la tarea programada ejecutará el script program.vbs
solo en entre las horas 20:00 - 22:00.
schtasks /create /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\program.vbs /sc minute /mo 30 /st 20:00 /et 22:00 /k
Si prestas atención, puedes observar que los parámetros de la primera instrucción con esta no tienen el mismo orden, por lo que este factor no produce errores, por supuesto, respetando que el comando que lleva un parámetro respete su orden de ejecución.
Crear una tarea programada para ejecutar un script un día en específico, en este caso, cada viernes (FRI
):
schtasks /create /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\program.vbs /sc weekly /d FRI
Crear una tarea programada que ejecute un script el primer día de cada mes:
schtasks /create /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\program.vbs /sc monthly
Debido a que el modificador predeterminado es ninguno (sin modificador), este comando usa el día predeterminado de 1 y el mes predeterminado de cada mes , sin requerir ningún parámetro adicional.
Crear una tarea programada que ejecute un script los días 10 de los meses: enero, febrero marzo. Además, que se ejecute específicamente a las 17:00.
schtasks /create /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\program.vbs /sc monthly /d 15 /m JAN,FEB,MAR /st 17:00
Crear una tarea programada que ejecute un script con los permisos de la cuenta del sistema:
schtasks /create /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\program.vbs /sc monthly /d 15 /ru System
Por último, te mostraré una estrategia para ejecutar más de un programa desde una tarea programada. La instrucción es prácticamente la misma, la idea es ejecutar un script que llame a los programas que deseas ejecutar, por ejemplo, un .bat
llamado script.bat
:
@echo off
C:\Windows\System32\Eventvwr.exe
C:\Windows\System32\Perfmon.exe
exit
Hacemos que el script.bat
que se ejecute diariamente:
schtasks /create /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\script.bat /sc daily
Como puedes observar, es posible aplicar un sinnúmero de variantes para lograr nuestros propósitos. Por otro lado, si deseas realizar mejores scripts para automatizar tus procesos, incluso para tratar temas de redes, te recomiendo aprender 20 comandos de red más importantes en Windows.
Borra una o más tareas programadas
schtasks delete
Es importante comentar que al remover una tarea programada no elimina ni interrumpe los programas que se mandan a ejecutar desde la misma.
Con la siguiente instrucción se procede a eliminar la tarea programada llamada: OpenWebinarsSchedule
.
schtasks /delete /tn OpenWebinarsSchedule /f
Si deseas eliminar todas las tareas programadas existentes por cualquier usuario de sistema local, aplicar la siguiente instrucción:
schtasks /delete /tn * /f
Cambia las propiedades de la tarea programada
schtasks change
Esta instrucción es el modo en el que puedes modificar una tarea programada, por ejemplo, en los siguientes casos:
Para llevar a cabo tal acción también necesita tener permisos requeridos, de acuerdo a la creación de una tarea programada con una configuración específica.
Cambiar el programa que manda a ejecutar la tarea programada: OpenWebinarsSchedule
.
schtasks /change /tn OpenWebinarsSchedule Script /tr C:\Users\OpenWebinars\Documents\Release\nuevo_script.bat
Para cambiar los permisos de ejecución de la tarea programada con el usuario del sistema local:
schtasks /change /tn OpenWebinarsSchedule /ru
El comando usa el parámetro /ru para indicar la cuenta del sistema. Debido a que las tareas que se ejecutan con permisos de cuenta del sistema no requieren una contraseña, schtasks.exe
no solicita una.
Ejecutar una tarea programada
schtasks run
Inicia una tarea programada inmediatamente. La operación de ejecución ignora la programación, pero utiliza la ubicación del archivo del programa, la cuenta de usuario y la contraseña guardadas en la tarea para ejecutar la tarea inmediatamente. La ejecución de una tarea no afecta la programación de la tarea y no cambia el siguiente tiempo de ejecución programado para la tarea.
Si ya tienes una tarea programada creada y la deseas ejecutar, tan simple será como lanzar la siguiente instrucción:
schtasks /run /tn "OpenWebinarsSchedule"
Para iniciar una tarea programada en un host remoto, basta con ejecutar la siguiente instrucción:
schtasks /run /tn OpenWebinarsSchedule /s RemoteServer
Muestra todas las tareas programadas
Enumera todas las tareas programadas para ejecutarse en el ordenador.
schtasks query
Esta instrucción es de las más sencillas, con solo ejecutar el parámetro /query
puedes listar todas las tareas programadas.
schtasks /query
Solicitar una visualización detallada de las tareas registradas en el host local:
schtasks /query /fo LIST /v
Este comando utiliza el parámetro /v para solicitar una visualización detallada (detallada) y el parámetro /fo LIST para formatear la visualización como una lista para facilitar la lectura. Puede utilizar este comando para verificar que una tarea que creó tiene el patrón de repetición previsto.
Detiene la tarea programada que se está ejecutando actualmente
schtasks end
Detener la ejecución de una tarea programada:
schtasks /end /tn "OpenWebinarsSchedule"
Gestionar una tarea programada no es cosa del otro mundo, solo hay que jugar un poco con los parámetros que nos ofrece y dedicarle un momento a hacer pruebas hasta conseguir el resultado esperado.
Se ha logrado obtener un sinnúmero de ejemplos donde podemos rescatar instrucciones para adaptarlas a nuestras necesidades diarias. Automatizar lo más posible los sistemas te ahorrará mucho tiempo y esfuerzo. Delega todo el trabajo que puedas al ordenador.
También te puede interesar
¿Quieres utilizar PowerShell de forma más avanzada? Con este curso de PowerShell para administradores dominarás el uso de...
Aprende a cómo instalar PowerShell en 2 minutos y empieza a dar tus primeros pasos con esta potente consola de Windows.