Hay tareas que nadie debería hacer a mano: una copia de seguridad cada noche, limpiar una carpeta de descargas o lanzar un script al encender el PC. El Programador de tareas de Windows lo hace por ti, incluso sin que haya nadie con la sesión iniciada. Aquí verás cómo crear una tarea bien configurada, cómo hacerlo desde la línea de comandos y cómo averiguar por qué una tarea «no hace nada».
En resumen
- Cada tarea tiene desencadenadores (cuándo), acciones (qué), condiciones y configuración (en qué casos sí o no).
- Para scripts usa Crear tarea, no Crear tarea básica: da acceso a privilegios, cuenta de ejecución y condiciones.
- Si no se ejecuta, revisa el resultado de la última ejecución y activa el historial, que viene desactivado.
Abrir el Programador de tareas
Pulsa Windows + R, escribe taskschd.msc y pulsa Intro. También lo encuentras buscando «Programador de tareas» en el menú Inicio.
La ventana tiene tres zonas: a la izquierda, la Biblioteca del Programador de tareas con carpetas; en el centro, las tareas de la carpeta seleccionada; a la derecha, el panel Acciones. Windows y muchos programas guardan sus propias tareas en subcarpetas como Microsoft\Windows. No toques esas; crea una carpeta tuya (clic derecho en la Biblioteca > Nueva carpeta) para tener las tuyas localizadas.
Las cuatro piezas de una tarea

| Pestaña | Qué define | Ejemplo |
|---|---|---|
| Desencadenadores | Cuándo arranca | Todos los días a las 02:00 |
| Acciones | Qué ejecuta | powershell.exe con un script |
| Condiciones | Requisitos del equipo | Solo si está conectado a la corriente |
| Configuración | Comportamiento ante fallos | Reintentar, detener si dura demasiado |
La pestaña General añade dos cosas clave: con qué cuenta se ejecuta y con qué privilegios.
Desencadenadores disponibles
- Según una programación: una vez, diaria, semanal o mensual, con repetición opcional (por ejemplo, cada 15 minutos durante 12 horas).
- Al iniciar sesión: de cualquier usuario o de uno concreto.
- Al iniciar el sistema: antes de que nadie inicie sesión.
- Al estar inactivo: cuando el equipo lleva un rato sin uso.
- Al producirse un evento: cuando aparece un evento concreto en el Visor de eventos.
- Al bloquear o desbloquear la estación de trabajo, y al conectar o desconectar una sesión remota.
Una tarea puede tener varios desencadenadores. Basta con que se cumpla uno.
Crear una tarea para un script, paso a paso
Supongamos un script de PowerShell en C:\Scripts\copia.ps1 que quieres ejecutar cada noche.
- En el panel derecho, pulsa Crear tarea (no «Crear tarea básica»).
- En General, ponle un nombre claro, por ejemplo
Copia nocturna. - Elige Ejecutar tanto si el usuario inició sesión como si no. Al guardar te pedirá la contraseña de la cuenta.
- Marca Ejecutar con los privilegios más altos si el script necesita permisos de administrador.
- En Desencadenadores, pulsa Nuevo, elige Según una programación, Diariamente y la hora.
- En Acciones, pulsa Nuevo y rellena:
- Programa o script:
powershell.exe - Agregar argumentos:
-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\copia.ps1" - Iniciar en:
C:\Scripts
- Programa o script:
- En Condiciones, si es un portátil, desmarca Iniciar la tarea solo si el equipo está conectado a la corriente alterna si quieres que funcione también con batería.
- En Configuración, marca Ejecutar la tarea lo antes posible si no hubo un inicio programado. Así, si el PC estaba apagado a las 02:00, se ejecutará al encenderlo.
- Pulsa Aceptar, introduce la contraseña y prueba con clic derecho > Ejecutar.
Para un .bat, pon directamente la ruta del archivo en Programa o script y la carpeta en Iniciar en.
Por qué importa «Iniciar en»
Si lo dejas vacío, la tarea arranca con una carpeta de trabajo de sistema, normalmente C:\Windows\System32. Cualquier ruta relativa del script (un config.ini, un log.txt) apuntará ahí y fallará. Rellena siempre «Iniciar en» o usa rutas absolutas dentro del script.

Con qué cuenta y con qué privilegios

| Opción | Qué pasa | Cuándo usarla |
|---|---|---|
| Ejecutar solo cuando el usuario haya iniciado sesión | Se ve la ventana; necesita la sesión abierta | Programas con interfaz, avisos al usuario |
| Ejecutar tanto si el usuario inició sesión como si no | Se ejecuta en segundo plano, sin ventana visible | Scripts y copias de seguridad |
| No almacenar la contraseña | No pide contraseña, pero solo accede a recursos locales | Scripts que no tocan la red |
Cuenta SYSTEM | Máximos permisos locales, sin contraseña | Mantenimiento del propio equipo |
| Privilegios más altos | Se ejecuta elevado, sin aviso de UAC | Scripts que requieren administrador |
Dos consecuencias que sorprenden:
- Con «tanto si inició sesión como si no», no verás nada en pantalla. Si el script espera que pulses una tecla, se queda esperando para siempre.
- Las unidades de red asignadas (como
Z:) no existen en ese contexto. Usa rutas UNC como\\NAS\Copias.
Crear tareas desde la línea de comandos con schtasks
schtasks permite crear, consultar y borrar tareas desde un script, útil para configurar varios equipos iguales. Ejecútalo en una consola como administrador.
Crear una tarea diaria a las 02:00 con la cuenta SYSTEM y privilegios elevados:
schtasks /create /tn "Mis tareas\Copia nocturna" /tr "C:\Scripts\copia.bat" /sc daily /st 02:00 /ru SYSTEM /rl highest
Otros ejemplos habituales:
rem Cada 30 minutos
schtasks /create /tn "Mis tareas\Sincronizar" /tr "C:\Scripts\sync.bat" /sc minute /mo 30
rem Lunes y viernes a las 18:00
schtasks /create /tn "Mis tareas\Informe" /tr "C:\Scripts\informe.bat" /sc weekly /d MON,FRI /st 18:00
rem Al iniciar el sistema
schtasks /create /tn "Mis tareas\Arranque" /tr "C:\Scripts\arranque.bat" /sc onstart /ru SYSTEM
| Parámetro | Para qué sirve |
|---|---|
/tn | Nombre de la tarea, con carpeta si quieres |
/tr | Programa o script a ejecutar |
/sc | Frecuencia: minute, hourly, daily, weekly, monthly, once, onstart, onlogon, onidle, onevent |
/mo | Modificador: cada cuántos minutos, horas, días… |
/st | Hora de inicio en formato HH:mm |
/ru | Cuenta con la que se ejecuta |
/rl highest | Privilegios más altos |
Gestionar tareas existentes:
schtasks /query /tn "Mis tareas\Copia nocturna" /v /fo list
schtasks /run /tn "Mis tareas\Copia nocturna"
schtasks /change /tn "Mis tareas\Copia nocturna" /disable
schtasks /delete /tn "Mis tareas\Copia nocturna" /f
Si la ruta del script lleva espacios, dentro de /tr necesitas comillas escapadas: /tr "\"C:\Mis scripts\copia.bat\"". Es la causa más común de tareas creadas con schtasks que luego no encuentran el archivo.
En PowerShell existe la alternativa con cmdlets, más legible para tareas complejas:
$accion = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\copia.ps1"' -WorkingDirectory "C:\Scripts"
$disparador = New-ScheduledTaskTrigger -Daily -At 2am
Register-ScheduledTask -TaskName "Copia nocturna" -TaskPath "\Mis tareas\" -Action $accion -Trigger $disparador -User "SYSTEM" -RunLevel Highest
Ver el historial y por qué una tarea no se ejecuta
Activa el historial
Por defecto, el Programador no guarda historial. En el panel derecho, con la Biblioteca seleccionada, pulsa Habilitar historial de todas las tareas. A partir de ese momento, la pestaña Historial de cada tarea muestra cuándo se desencadenó, cuándo empezó la acción y cómo terminó.
Esos eventos se guardan en el Visor de eventos, en Registros de aplicaciones y servicios > Microsoft > Windows > TaskScheduler > Operational.
Lee el resultado de la última ejecución
En la lista de tareas, la columna Resultado de la última ejecución da un código. Los más frecuentes:
| Código | Significado | Qué revisar |
|---|---|---|
0x0 | Terminó correctamente | Si aun así no hizo nada, el problema está en el script |
0x1 | El programa devolvió error | Ruta del script, «Iniciar en», permisos, o un programa que devuelve 1 sin fallar |
0x2 | Archivo no encontrado | Ruta del programa o comillas mal puestas |
0x41301 | La tarea se está ejecutando | Puede estar colgada esperando una entrada |
0x41303 | Aún no se ha ejecutado | El desencadenador no se ha cumplido |
0x41306 | Se detuvo la tarea | La paró un usuario o el límite de tiempo |
Ojo con 0x1: algunos programas devuelven 1 sin que haya fallo. Robocopy, por ejemplo, devuelve 1 cuando ha copiado archivos con éxito. En esos casos, el código de la tarea no basta y hay que mirar el registro del propio programa.
Desde PowerShell puedes consultar lo mismo:
Get-ScheduledTaskInfo -TaskName "Copia nocturna" -TaskPath "\Mis tareas\"
Truco para depurar un script
Haz que el script escriba su propia salida en un archivo. Cambia la acción a algo así:
cmd.exe /c "C:\Scripts\copia.bat > C:\Scripts\copia-log.txt 2>&1"
Así ves el mensaje de error real, que en una tarea sin ventana nunca llegarías a leer.
Errores habituales
- «Iniciar en» vacío y rutas relativas en el script que apuntan a
System32. - Portátil con batería y la condición de corriente alterna activada: la tarea se salta en silencio.
- Unidades de red con letra en una tarea que se ejecuta sin sesión. Usa rutas UNC.
- Cambiar la contraseña de la cuenta y no actualizarla en la tarea: deja de ejecutarse con error de inicio de sesión. Edita la tarea y vuelve a introducirla.
- Scripts que piden confirmación o muestran una pausa: con la tarea en segundo plano, nunca terminan.
- Ejecución de scripts bloqueada en PowerShell. Pasa
-ExecutionPolicy Bypassen los argumentos en lugar de cambiar la política de todo el equipo. - El PC estaba apagado o suspendido a la hora programada y no está marcada la opción de ejecutar lo antes posible.



