Saltar al contenido
GEEKnodes

Windows

Programador de tareas de Windows: automatizar scripts y programas

Programador de tareas de Windows para lanzar scripts solos: desencadenadores, privilegios, ejecutar sin sesión, schtasks y por qué una tarea no se ejecuta.

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

Una tarea en el centro con cuatro piezas: desencadenadores, acciones, condiciones y configuración.
Cuándo, qué, en qué casos y cómo reaccionar ante fallos.
PestañaQué defineEjemplo
DesencadenadoresCuándo arrancaTodos los días a las 02:00
AccionesQué ejecutapowershell.exe con un script
CondicionesRequisitos del equipoSolo si está conectado a la corriente
ConfiguraciónComportamiento ante fallosReintentar, 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.

  1. En el panel derecho, pulsa Crear tarea (no «Crear tarea básica»).
  2. En General, ponle un nombre claro, por ejemplo Copia nocturna.
  3. Elige Ejecutar tanto si el usuario inició sesión como si no. Al guardar te pedirá la contraseña de la cuenta.
  4. Marca Ejecutar con los privilegios más altos si el script necesita permisos de administrador.
  5. En Desencadenadores, pulsa Nuevo, elige Según una programación, Diariamente y la hora.
  6. 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
  7. 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.
  8. 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.
  9. 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.

Comparación: con Iniciar en vacío el script busca config.ini en System32 y falla; con C:\Scripts lo encuentra.
Sin «Iniciar en», las rutas relativas apuntan a System32.

Con qué cuenta y con qué privilegios

Tarea en segundo plano sin ventana: la unidad Z no existe y la ruta UNC al NAS sí funciona.
Sin sesión no hay ventana ni letras de red: usa rutas UNC.
OpciónQué pasaCuándo usarla
Ejecutar solo cuando el usuario haya iniciado sesiónSe ve la ventana; necesita la sesión abiertaProgramas con interfaz, avisos al usuario
Ejecutar tanto si el usuario inició sesión como si noSe ejecuta en segundo plano, sin ventana visibleScripts y copias de seguridad
No almacenar la contraseñaNo pide contraseña, pero solo accede a recursos localesScripts que no tocan la red
Cuenta SYSTEMMáximos permisos locales, sin contraseñaMantenimiento del propio equipo
Privilegios más altosSe ejecuta elevado, sin aviso de UACScripts 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ámetroPara qué sirve
/tnNombre de la tarea, con carpeta si quieres
/trPrograma o script a ejecutar
/scFrecuencia: minute, hourly, daily, weekly, monthly, once, onstart, onlogon, onidle, onevent
/moModificador: cada cuántos minutos, horas, días…
/stHora de inicio en formato HH:mm
/ruCuenta con la que se ejecuta
/rl highestPrivilegios 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ódigoSignificadoQué revisar
0x0Terminó correctamenteSi aun así no hizo nada, el problema está en el script
0x1El programa devolvió errorRuta del script, «Iniciar en», permisos, o un programa que devuelve 1 sin fallar
0x2Archivo no encontradoRuta del programa o comillas mal puestas
0x41301La tarea se está ejecutandoPuede estar colgada esperando una entrada
0x41303Aún no se ha ejecutadoEl desencadenador no se ha cumplido
0x41306Se detuvo la tareaLa 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 Bypass en 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.

Relacionados

Preferencias de accesibilidad

Perfiles rápidos

Texto y lectura

Tamaño del texto
Por defecto
Altura de línea
Por defecto
Espaciado entre letras
Por defecto
Espaciado entre palabras
Por defecto

Color

Movimiento y orientación

Cursor