OpenWebinars

Redes y Sistemas

Programación de tareas desde la terminal de Windows

Aprende a programar tareas con la terminal de Windows, aprovechando sus bondades para automatizar tus sistemas y hacer que se ejecuten cuando lo necesites.

Jerson Martínez

Jerson Martínez

Experto DevOps

Lectura 8 minutos

Publicado el 5 de marzo de 2021

Compartir

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.

Qué no es una tarea programada

  • 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.

Conviértete en SysAdmin
Domina las tecnologías más demandadas. Accede a cursos, talleres y laboratorios prácticos de Linux, VMware, Tomcat, IPv6 y más.
Comenzar gratis ahora

Primero lo primero ¿Cuál es la terminal de Windows?

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.

Instrucciones de comandos

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:

  • Para ver todas las tareas programadas en el equipo local, escriba at y, a continuación, presione Entrar.
  • Para ver todas las tareas programadas en un equipo llamado soporte técnico, escriba at \\support y, a continuación, presione Entrar.
  • Para ver el identificador de tarea 18 en el equipo local, escriba 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:

  • El programa que ejecuta la tarea (/tr)
  • La cuenta de usuario con la que se ejecuta la tarea (/ru)
  • La contraseña de la cuenta de usuario (/rp)
  • Agrega la propiedad solo interactiva a la tarea (/it)

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

Asegura la infraestructura tecnológica de tu empresa con el menor esfuerzo
Cursos, talleres y laboratorios actualizados para que tus equipos dominen las últimas herramientas para gestionar servidores y aplicaciones.
Solicitar más información

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 /querypuedes 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.

Conclusión

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.

Compartir este post

También te puede interesar