Cómo programar tareas con PowerShell y el Programador de tareas de Windows

Cualquier tarea repetitiva de mantenimiento (copias, limpiezas, informes) debería ejecutarse sola. En esta guía verás cómo crear tareas programadas en Windows directamente desde PowerShell, sin tocar la interfaz gráfica, con ejemplos que puedes adaptar en minutos.
El trío de cmdlets clave
Desde Windows 8 y Server 2012, PowerShell incluye el módulo ScheduledTasks. Los tres cmdlets que más usarás son New-ScheduledTaskTrigger (cuándo), New-ScheduledTaskAction (qué) y Register-ScheduledTask (registrarla).
Ejemplo 1: ejecutar un script cada día a las 7:00
$accion = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\limpieza.ps1'
$disparador = New-ScheduledTaskTrigger -Daily -At 7:00
Register-ScheduledTask -TaskName 'Limpieza diaria' -Action $accion -Trigger $disparador -Description 'Limpia archivos temporales cada mañana'Con esto, la tarea aparece en el Programador de tareas como cualquier otra. El parámetro -NoProfile acelera el arranque y -ExecutionPolicy Bypass evita bloqueos de directiva para esa ejecución concreta.
Ejemplo 2: al iniciar sesión o al encender el equipo
# Al iniciar sesión de cualquier usuario
$t1 = New-ScheduledTaskTrigger -AtLogOn
# Al arrancar el sistema (ideal para servidores)
$t2 = New-ScheduledTaskTrigger -AtStartupEjemplo 3: ejecutar con permisos de administrador
$principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName 'Mantenimiento' -Action $accion -Trigger $disparador -Principal $principalEjecutar como SYSTEM evita problemas de contraseñas caducadas, aunque la tarea no podrá acceder a recursos de red que requieran tu usuario.
Gestionar las tareas existentes
# Ver todas las tareas y su estado
Get-ScheduledTask | Where-Object State -eq 'Ready' | Select-Object TaskName, TaskPath
# Ejecutarla ahora mismo para probarla
Start-ScheduledTask -TaskName 'Limpieza diaria'
# Ver el resultado de la última ejecución
Get-ScheduledTaskInfo -TaskName 'Limpieza diaria'
# Eliminarla
Unregister-ScheduledTask -TaskName 'Limpieza diaria' -Confirm:$falseErrores comunes
- 0x1 como último resultado: casi siempre es una ruta con espacios sin comillas o permisos insuficientes.
- La tarea no se ejecuta con el equipo bloqueado: marca «Ejecutar tanto si el usuario inició sesión como si no» o usa la cuenta SYSTEM.
- El script funciona a mano pero no programado: usa siempre rutas absolutas; la tarea no hereda tu directorio de trabajo.
Conclusión
Programar tareas con PowerShell es más rápido y reproducible que hacerlo a golpe de clic: el mismo script te sirve para configurar diez servidores idénticos. Empieza automatizando una sola tarea pequeña y en un mes te preguntarás cómo vivías sin ello.