Powershell

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 -AtStartup

Ejemplo 3: ejecutar con permisos de administrador

$principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName 'Mantenimiento' -Action $accion -Trigger $disparador -Principal $principal

Ejecutar 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:$false

Errores 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *