Cómo programar tareas en Windows sin GUI — schtasks en la práctica

¿Cuántos de ustedes abrieron alguna vez el Programador de Tareas gráfico de Windows, hicieron clic en "Crear tarea…" y se perdieron entre las pestañas de Desencadenadores, Acciones y Condiciones? schtasks.exe resuelve esto en la terminal, sin GUI, en una sola línea de comando — y está instalado en cualquier Windows desde el XP.
Si ya conoces el crontab de Linux, la lógica es similar: defines cuándo ejecutar y qué ejecutar. La diferencia principal es la sintaxis — y el hecho de que schtasks puede correr tareas con cualquier usuario, incluido SYSTEM, sin necesidad de una contraseña visible en el script.
Consultando tareas programadas: /Query
Antes de crear nada, conviene ver qué ya está programado en la máquina:
schtasks /Query /FO TABLE /NHPara ver los detalles de una tarea específica:
schtasks /Query /TN "NombreDeLaTarea" /FO LIST /VEl parámetro /FO define el formato de salida (TABLE, LIST o CSV). Con /V ves todos los campos: estado, último código de resultado, próxima ejecución, usuario que la ejecuta, historial de ejecuciones. Útil para diagnosticar por qué una tarea falló en silencio.
Creando tu primera tarea: /Create
La estructura básica:
schtasks /Create /TN "BackupDiario" /TR "C:\Scripts\backup.bat" /SC DAILY /ST 03:00 /RU SYSTEMParámetros esenciales:
- /TN — Task Name: el nombre que aparece en el Programador de Tareas
- /TR — Task Run: el ejecutable o comando a correr
- /SC — Schedule: frecuencia de ejecución (ver abajo)
- /ST — Start Time: hora en formato HH:MM
- /RU — Run User: con qué cuenta se ejecuta (
SYSTEM,NETWORK SERVICEo un usuario específico) - /F — Force: sobrescribe la tarea si ya existe, sin pedir confirmación
¿Qué frecuencias acepta /SC?
El parámetro /SC define el ritmo de la tarea. Los valores más usados:
MINUTE/HOURLY— cada N minutos u horas (combinar con/MO Npara el intervalo)DAILY— una vez al día a la hora definida por/STWEEKLY— una vez por semana; usa/D MON,WED,FRIpara días específicosMONTHLY— una vez al mes; usa/D 1,15para días del mesONSTART— al iniciar Windows, antes del login de cualquier usuarioONLOGON— cuando cualquier usuario inicia sesiónONCE— una única vez en la fecha+hora especificada con/SD DD/MM/AAAA
Ejecutando scripts PowerShell con schtasks
El caso de uso más común para sysadmins es programar un .ps1 sin abrir ninguna ventana. La clave es pasar PowerShell como ejecutable y el script como argumento:
schtasks /Create /TN "BackupDiario" ^
/TR "powershell.exe -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Scripts\backup.ps1" ^
/SC DAILY /ST 03:00 ^
/RU SYSTEM ^
/F-NonInteractive garantiza que el script no se detenga esperando input del usuario. -WindowStyle Hidden suprime la ventana negra de la consola — sin ese flag, aparece una ventana en segundo plano cada vez que la tarea corre. -ExecutionPolicy Bypass evita que la política de ejecución bloquee el script; si tu política ya está configurada de forma permisiva, puedes omitirlo.
¿Cómo ejecutar un script PowerShell desde el Programador de Tareas sin abrir ventana?
Usa powershell.exe -WindowStyle Hidden -NonInteractive -File ruta\script.ps1 en el parámetro /TR, con /RU SYSTEM. Estos dos flags juntos garantizan ejecución silenciosa: no aparece ninguna ventana y el script no se traba esperando confirmación del usuario. Ejecutarlo como SYSTEM elimina la necesidad de almacenar credenciales de usuario en la tarea.
Gestionando tareas existentes: /Change, /Delete y /Run
Cambiar el horario o el ejecutable de una tarea:
schtasks /Change /TN "BackupDiario" /ST 04:00Atención: /Change no altera el tipo de programación (/SC). Si necesitas pasar de DAILY a WEEKLY, la forma correcta es borrar y recrear.
Eliminar una tarea:
schtasks /Delete /TN "BackupDiario" /FForzar la ejecución inmediata sin esperar al próximo horario programado:
schtasks /Run /TN "BackupDiario"Este último es especialmente útil justo después de crear una tarea: la pruebas ahora mismo para ver si funciona, sin tener que esperar a las 03:00 del día siguiente para descubrir que faltó una barra en la ruta del script.
Alternativa moderna: el módulo ScheduledTasks de PowerShell
Para automatizaciones más complejas — múltiples desencadenadores, condiciones de batería o conectividad de red, gestión en máquinas remotas — PowerShell tiene el módulo ScheduledTasks nativo desde Windows 8. La lógica es modular: creas cada pieza por separado y las registras al final:
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NonInteractive -WindowStyle Hidden -File C:\Scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3:00AM
$settings = New-ScheduledTaskSettingsSet `
-ExecutionTimeLimit (New-TimeSpan -Hours 1) `
-StartWhenAvailable
Register-ScheduledTask -TaskName "BackupDiario" `
-Action $action -Trigger $trigger -Settings $settings `
-RunLevel Highest -Force-RunLevel Highest equivale a "Ejecutar con privilegios más altos" en la GUI. -StartWhenAvailable hace que la tarea corra en cuanto sea posible si el horario programado pasó con el PC apagado — un comportamiento que schtasks clásico no expone fácilmente. Si necesitas entender mejor el entorno PowerShell antes de armar estos pipelines, nuestra guía de PowerShell para principiantes cubre los conceptos básicos de forma directa.
Dónde encaja esto en tu arsenal Windows
schtasks combina bien con otras herramientas nativas que ya cubrimos: winget para instalar y actualizar programas desde la terminal, por ejemplo, corre directo por línea de comandos — programar un winget upgrade --all cada semana es una sola línea de schtasks. De la misma forma, el OpenSSH nativo de Windows 11 se puede combinar con tareas programadas: generar claves, respaldar configuraciones, enviar logs vía SCP — todo sin intervención manual.
El resultado es una estación o servidor Windows que se administra solo, en los horarios correctos, sin depender de ninguna herramienta de terceros. Si quieres comparar con el equivalente en Linux, tenemos el funcionamiento detallado del crontab en Linux — entender ambos ayuda bastante cuando el entorno es mixto.




Comentarios