Guía completa para programar tareas en Windows con schtasks

Última actualización: 17/12/2025
Autor: Isaac
  • Schtasks es la interfaz de línea de comandos del Programador de tareas y permite crear, modificar, ejecutar y borrar tareas tanto locales como remotas.
  • Los parámetros clave como /sc, /tn, /tr, /ru, /mo, /st o /d definen qué se ejecuta, con qué permisos y con qué frecuencia o condición de disparo.
  • La gestión de permisos y cuentas (Administrador, SYSTEM, usuarios remotos con /u y /p) es crítica para que las tareas se creen y se ejecuten correctamente.
  • Schtasks sustituye al antiguo comando AT y ofrece una plataforma robusta para automatizar mantenimientos, scripts y procesos recurrentes en Windows.

programar tareas con schtasks

Programar tareas en Windows con schtasks es una de esas cosas que, cuando las dominas, te preguntas por qué has estado haciendo trabajos repetitivos a mano durante años. Copias de seguridad a deshoras, scripts que lanzas cada mañana, servicios que debes reiniciar tras un corte… todo eso se puede automatizar con un simple comando.

El comando schtasks es la interfaz en línea de comandos del Programador de tareas de Windows, y te permite crear, modificar, listar, ejecutar y eliminar tareas tanto en tu propio equipo como en máquinas remotas de la red. Vamos a verlo a fondo, con ejemplos claros y explicando cada parámetro clave para que puedas sacarle todo el jugo, desde automatizaciones sencillas hasta escenarios avanzados con usuarios, permisos y equipos remotos.

Qué es schtasks y qué puede hacer por ti

ejemplos de schtasks en Windows

Schtasks.exe es la herramienta de consola que utiliza Windows para hablar con el Programador de tareas. Gracias a ella puedes definir que un programa, script o comando se ejecute de forma automática en una fecha y hora concretas o con una periodicidad determinada, sin tener que tocar la interfaz gráfica.

Con schtasks puedes programar tareas periódicas (cada X minutos, horas, días, semanas o meses), tareas que se lanzan al iniciar el sistema, al iniciar sesión un usuario concreto, cuando el equipo está inactivo o incluso en respuesta a eventos del sistema. Además, puedes iniciar tareas bajo distintas cuentas de usuario (incluida la cuenta SYSTEM) y en equipos remotos.

Las operaciones básicas de schtasks se agrupan en seis subcomandos principales, que son los que usarás el 99% del tiempo:

  • schtasks change: modifica propiedades de una tarea existente (programa a ejecutar, usuario, contraseña, modo interactivo…).
  • schtasks create: crea una nueva tarea programada.
  • schtasks delete: borra una tarea del programador.
  • schtasks end: detiene el programa que está ejecutando una tarea.
  • schtasks query: muestra las tareas programadas del equipo.
  • schtasks run: fuerza la ejecución inmediata de una tarea ya creada.

Detrás de estas operaciones hay un montón de parámetros para definir la frecuencia, las fechas de inicio y fin, el usuario bajo el que se ejecuta la tarea, el equipo remoto, retrasos, duración, niveles de privilegio, etc. Te los desgranamos justo debajo.

Permisos necesarios para trabajar con schtasks

permisos para schtasks

Antes de meterte a crear tareas como loco, conviene tener claro qué permisos necesitas, porque si no, acabarás con tareas que se crean pero no se ejecutan o que fallan silenciosamente.

En el equipo local, para gestionar todas las tareas (verlas, crearlas, modificarlas y eliminarlas) es necesario pertenecer al grupo de Administradores. Un usuario estándar puede crear tareas propias en algunos casos, pero si quieres control total sobre el sistema, hazlo desde una cuenta con privilegios administrativos.

En equipos remotos, la cosa es similar: la cuenta que uses debe ser Administrador en el equipo remoto. Puedes lanzar el comando desde tu equipo y usar el parámetro /s para indicar el equipo de destino y /u y /p para proporcionar unas credenciales de administrador de esa máquina o dominio.

El parámetro /u solo funciona correctamente cuando el equipo local y el remoto están en el mismo dominio o en dominios con confianza configurada. Si no hay relación de confianza, el equipo remoto no puede autenticar la cuenta que le pasas y la tarea quedará mal configurada o vacía, aunque parezca creada.

Además, la tarea en sí debe tener permisos suficientes para hacer lo que le pides. Por defecto, las tareas se ejecutan bajo el usuario actual o bajo el que especifiques con /u. Si quieres que se lancen con otra cuenta o directamente con permisos de sistema, debes usar el parámetro /ru (Run As User) y, normalmente, /rp para indicar la contraseña.

Sintaxis general de schtasks y parámetros clave

La sintaxis de schtasks es bastante extensa, pero se basa siempre en el mismo patrón: subcomando, seguido de parámetros que definen qué, cuándo, dónde y con qué permisos se ejecuta la tarea. Para la creación de tareas, la forma general es:

  Guía completa sobre la tecla anfitrión en VirtualBox

schtasks /create /sc <tipo_programación> /tn <nombre_tarea> /tr <comando_o_programa>

Los parámetros fundamentales a la hora de crear una tarea son los siguientes:

  • /sc <scheduletype>: tipo de programación. Valores típicos:
    • MINUTE: cada N minutos.
    • HOURLY: cada N horas.
    • DAILY: cada N días.
    • WEEKLY: cada N semanas.
    • MONTHLY: cada N meses.
    • ONCE: una única ejecución.
    • ONSTART: en cada arranque del sistema.
    • ONLOGON: al iniciar sesión un usuario.
    • ONIDLE: cuando el sistema lleva X minutos inactivo.
    • ONEVENT: en respuesta a un evento concreto del registro.
  • /tn <taskname>: nombre único de la tarea. Puede incluir ruta de carpeta (por ejemplo, "MiCarpeta\BackupDB"). Máximo 238 caracteres.
  • /tr <taskrun>: ruta completa del ejecutable, script o .bat que se va a ejecutar. Si no especificas ruta, se asume %SystemRoot%\System32. Longitud máxima 262 caracteres.
  • /s <computer>: equipo remoto (nombre o IP). Si no lo usas, actúas sobre el equipo local.
  • /u <usuario>: credenciales con las que se ejecuta el propio comando schtasks (para programar en remoto).
  • /p <password>: contraseña del usuario indicado en /u. Si no la proporcionas, la consola la pedirá.
  • /ru {<usuario> | system}: cuenta con la que se ejecutará la tarea. Puedes usar un usuario de dominio, local o la cuenta System.
  • /rp <password>: contraseña para la cuenta indicada en /ru. No se usa con /ru System, porque la cuenta SYSTEM no tiene contraseña.
  • /mo <modifier>: modificador de frecuencia dentro del tipo de programación (cada cuántos minutos, horas, días, semanas o meses).
  • /d <day>: día o días concretos para WEEKLY o ciertos modos de MONTHLY (por ejemplo, /d MON,FRI).
  • /m <month>: meses concretos (JAN-DEC o * para todos).
  • /st <starttime>: hora de inicio en formato 24h (HH:MM).
  • /et <endtime> o /du <duration>: hora de fin o duración máxima para programaciones por minutos/horas.
  • /sd <startdate> y /ed <enddate>: fechas de inicio y fin según la configuración regional del sistema.
  • /it: hace que la tarea solo se ejecute si el usuario de ejecución está logado de forma interactiva.
  • /np: no guarda contraseña; la tarea se ejecuta de forma no interactiva y solo con recursos locales.
  • /z: borra automáticamente la tarea cuando finaliza la programación.
  • /rl <level>: nivel de privilegio (LIMITED o HIGHEST).
  • /f: fuerza la creación o modificación, sobrescribiendo sin pedir confirmación.

Hay más parámetros avanzados (XML, compatibilidad con versiones antiguas, retrasos con /delay, códigos HRESULT, etc.), pero con los anteriores puedes cubrir prácticamente cualquier escenario estándar.

Programar tareas con diferentes frecuencias

Uno de los puntos fuertes de schtasks es la flexibilidad a la hora de definir la periodicidad. Puedes ajustar desde ejecuciones cada pocos minutos hasta lanzamientos el último día de ciertos meses o los segundos domingos de cada trimestre.

Para programaciones por minutos, se usa /sc minute. El modificador /mo indica cada cuántos minutos se lanza la tarea. Si no lo indicas, el valor por defecto es 1 minuto.

Ejemplo intervalo 20 minutos: schtasks /create /sc minute /mo 20 /tn "Security Script" /tr \\central\data\scripts\sec.vbs

Ejemplo con franja horaria: schtasks /create /tn "Security Script" /tr sec.vbs /sc minute /mo 100 /st 17:00 /et 08:00 /k

Para programaciones horarias se emplea /sc hourly, y de nuevo /mo indica cada cuántas horas. Por ejemplo, para ejecutar MyApp cada 5 horas a partir del 1 de marzo:

Ejemplo horario 5 horas: schtasks /create /sc hourly /mo 5 /sd 03/01/2002 /tn MyApp /tr c:\apps\myapp.exe

En programaciones diarias (/sc daily) puedes usar /mo para espaciar las ejecuciones. Por ejemplo, ejecutar MyApp cada 12 días a partir de una fecha concreta:

Ejemplo diario espaciado: schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc daily /mo 12 /sd 12/31/2002 /st 13:00

La programación semanal se define con /sc weekly, combinando /mo (intervalo de semanas) y /d (días de la semana: MON, TUE, WED, THU, FRI, SAT, SUN o *). Por ejemplo, para lanzar MyApp cada dos viernes:

Ejemplo semanal (cada 2 semanas): schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc weekly /mo 2 /d FRI

Para programaciones mensuales hay varias variantes:

  • Por día concreto del mes (1-31) con /sc monthly y /d.
  • Por semana y día (FIRST, SECOND, THIRD, FOURTH + /d día) y opcionalmente /m con los meses.
  • Último día del mes con /mo LASTDAY y /m para meses específicos o * para todos.

Ejemplo mensual (último día de meses específicos): schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc monthly /mo LASTDAY /m FEB,MAR /st 18:00

Disparadores especiales: una sola vez, arranque, inicio de sesión e inactividad

No siempre quieres una tarea recurrente. A veces solo necesitas ejecutar algo una vez a una fecha y hora concretas. Para ello está el tipo /sc once, que exige un /st y, normalmente, un /sd:

  Cómo cambiar la frecuencia de refresco de la pantalla en Windows: Guía completa

Ejemplo única ejecución: schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc once /sd 01/01/2003 /st 00:00

El tipo ONSTART (/sc onstart) hace que la tarea se ejecute en cada arranque del sistema, ideal para scripts de mantenimiento, monitorización o servicios propios:

Ejemplo OnStart: schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc onstart

ONLOGON (/sc onlogon) ejecuta la tarea cuando un usuario inicia sesión. Puedes usarlo para lanzar scripts de entorno, montar unidades de red, iniciar aplicaciones internas, etc. Por ejemplo, en un equipo remoto:

Ejemplo OnLogon remoto: schtasks /create /tn "Start Web Site" /tr c:\myiis\webstart.bat /sc onlogon /s Server23

ONIDLE (/sc onidle) dispara la tarea cuando el equipo lleva un tiempo sin actividad de usuario, que defines con /i en minutos. Por ejemplo, para arrancar MyApp cuando el equipo lleva 10 minutos inactivo:

Ejemplo OnIdle 10 min: schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc onidle /i 10

Crear tareas con privilegios específicos: usuario alternativo y SYSTEM

Un uso muy potente de schtasks es lanzar tareas con cuentas distintas de la que estás usando en ese momento. Puedes, por ejemplo, programar un mantenimiento bajo una cuenta de administrador aunque estés logado con un usuario limitado, o ejecutar procesos con la cuenta SYSTEM para tener permisos elevados.

Para ejecutar una tarea con otra cuenta de usuario se usa el parámetro /ru junto con la contraseña en /rp. Por ejemplo, lanzar MyApp semanalmente los martes como Admin06 en el equipo local:

Ejemplo /ru alternativa: schtasks /create /tn MyApp /tr myapp.exe /sc weekly /d TUE /ru Admin06

En equipos remotos, /u y /p controlan quién programa la tarea, mientras que /ru define bajo qué cuenta se ejecutará. Son conceptos distintos que conviene no mezclar:

  • /u: credenciales para ejecutar el comando schtasks y crear la tarea en el remoto.
  • /ru: cuenta con la que se ejecutará la tarea cuando llegue la hora.

Ejemplo remoto con cuentas distintas: schtasks /create /tn MyApp /tr myapp.exe /sc daily /mo 4 /s Marketing /u Marketing\Admin01 /ru Reskits\User01

Si lo que quieres es usar la cuenta SYSTEM, que tiene privilegios muy elevados, basta con especificar /ru System sin contraseña. Por ejemplo, para ejecutar MyApp el día 15 de cada mes como SYSTEM:

Ejemplo como SYSTEM: schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc monthly /d 15 /ru System

Ten en cuenta que los procesos que corren como SYSTEM no son interactivos: el usuario no ve ventanas ni puede interactuar con ellas. Son ideales para servicios, scripts de mantenimiento o tareas de sistema, pero no para abrir aplicaciones visibles al usuario.

Gestionar tareas existentes: cambiar, ejecutar, listar y detener

Una vez que tienes tareas creadas, schtasks te ofrece varios subcomandos para administrarlas sin abrir la consola gráfica del Programador de tareas.

Para cambiar propiedades de una tarea existente se usa schtasks /change. Puedes modificar el programa que ejecuta, el usuario de ejecución, la contraseña o establecer que solo se ejecute en sesiones interactivas:

  • /tr: nuevo ejecutable o script.
  • /ru: nueva cuenta de ejecución (usuario o SYSTEM).
  • /rp: contraseña para la cuenta en /ru.
  • /it: marca la tarea como “solo cuando el usuario esté logado”.

Ejemplo cambio de script: schtasks /change /tn "OpenWebinarsSchedule" /tr C:\Users\OpenWebinars\Documents\Release\nuevo_script.bat

Si quieres lanzar una tarea ahora mismo, ignorando su programación, utilizas schtasks /run. Esta ejecución no altera la siguiente fecha programada:

Ejecutar inmediatamente: schtasks /run /tn "OpenWebinarsSchedule"

Para listar las tareas del equipo se emplea schtasks /query. Puedes obtener un listado sencillo, una tabla o un formato de lista detallado:

  • schtasks /query → listado básico.
  • schtasks /query /fo LIST /v → listado detallado, muy útil para depurar problemas.

Si una tarea está ejecutando un programa que quieres detener, dispones de schtasks /end. Solo necesitas el nombre de la tarea:

Forzar parada de tarea: schtasks /end /tn "OpenWebinarsSchedule"

Y cuando ya no necesites una tarea, la eliminas con schtasks /delete. Puedes borrar una tarea concreta o todas (con cuidado):

  • schtasks /delete /tn OpenWebinarsSchedule /f → borra esa tarea sin pedir confirmación.
  • schtasks /delete /tn * /f → borra todas las tareas programadas del sistema.

Persistencia mediante tareas programadas (visión técnica y de seguridad)

Un uso avanzado y delicado de schtasks es la creación de tareas como mecanismo de persistencia: dejar configurado que un programa o script se ejecute de forma periódica o al arrancar el sistema, incluso si nadie inicia sesión. Esto es útil para administradores legítimos, pero también lo usan atacantes, así que conviene entenderlo bien desde la óptica de ciberseguridad.

  Certificados y firmas de drivers en Windows: guía completa

Una tarea programada en Windows no es más que una orden para que el sistema lance un comando, script o ejecutable en un momento concreto o con cierta recurrencia. Si esa tarea está definida con la cuenta SYSTEM y una frecuencia muy corta, puedes conseguir que un binario se relance continuamente aunque alguien lo cierre.

Ejemplo persistencia (SYSTEM cada N minutos): schtasks /create /ru "SYSTEM" /sc minute /mo <minutos> /tn "<nombre>" /tr "<comando>"

Desglosando la orden anterior:

  1. /ru «SYSTEM»: ejecuta la tarea con la cuenta SYSTEM, es decir, con privilegios muy elevados.
  2. /sc minute: tipo de programación en minutos.
  3. /mo <minutos>: intervalo de repetición, por ejemplo 10 para cada diez minutos.
  4. /tn «<nombre>»: nombre identificativo de la tarea, que puede camuflarse con algo inocente si alguien quiere pasar desapercibido.
  5. /tr «<comando>»: programa o script que se ejecutará (ruta completa con argumentos).

Existen ejemplos donde se combina schtasks con herramientas como plink.exe para establecer conexiones inversas, túneles de puertos y similares, configurados para relanzarse cada cierto tiempo. Desde el punto de vista defensivo, revisar periódicamente las tareas programadas con schtasks /query /fo LIST /v y el visor de eventos es obligatorio para detectar este tipo de usos.

De AT a schtasks: por qué ya no deberías usar AT

Durante años, Windows incorporó el comando AT para programar tareas. En versiones modernas, este comando está oficialmente en desuso y la propia consola te lo dice al intentar usarlo: “El comando AT está desusado. Use en su lugar schtasks.exe”.

AT permitía programar comandos sencillos indicando solo la hora, fecha y el comando a ejecutar. Por ejemplo, para copiar documentos cada medianoche a otra unidad:

Ejemplo AT clásico: at 00:00 cmd /c copy C:\Documents\*.* J:\MyDocs

También podías listar y borrar tareas AT con variaciones del mismo comando (por ID, en equipos remotos, etc.). Sin embargo, no tenía ni de lejos la flexibilidad, granularidad de permisos o opciones avanzadas que ofrece schtasks.

En Windows 10 y posteriores, AT sigue existiendo solo como envoltorio de compatibilidad, pero devuelve mensajes de que la solicitud no es compatible. Si trabajas con versiones antiguas de Windows donde aún funcione, es recomendable migrar tus automatizaciones a schtasks, que es la herramienta soportada y mucho más potente.

Schtasks frente a la interfaz gráfica del Programador de tareas

Todo lo que hace schtasks se puede hacer también desde la consola gráfica del Programador de tareas (abre taskschd.msc desde Ejecutar), pero usar la línea de comandos tiene ventajas claras: puedes automatizar despliegues, generar scripts reutilizables, aplicar cambios en masa o trabajar contra equipos remotos sin sentarte delante de ellos.

Un enfoque muy práctico en entornos mixtos es combinar ambos mundos: creas una tarea base desde la interfaz gráfica para entender todos los ajustes, la exportas a XML, y luego usas schtasks con el parámetro /xml para desplegar copias ajustando solo lo necesario (usuario, fechas, etc.).

También puedes integrar schtasks en scripts .bat o .ps1 junto con otras tareas de mantenimiento: limpiar logs, reiniciar servicios, lanzar backups o notificaciones, todo disparado por una única tarea programada que llame a un script maestro.

Si gestionas muchas máquinas o usuarios, dominar schtasks y programas para automatizar tareas te ahorrará madrugones para hacer copias de seguridad manuales, te evitará olvidos y reducirá el riesgo de errores humanos al repetir siempre las mismas acciones a mano. Es, literalmente, enseñar al sistema a hacer por ti lo que te roba tiempo todos los días.

Entender bien schtasks, sus parámetros de programación y el juego entre /u, /ru, permisos locales y remotos te permite automatizar casi cualquier rutina en Windows de forma precisa, segura y reproducible, dejando al ordenador lo que mejor se le da: seguir instrucciones al pie de la letra las 24 horas.

programar y gestionar tareas programadas con schtaks
Artículo relacionado:
Cómo programar y gestionar tareas automáticas con schtasks en Windows