Sí, gestionar tareas programadas mediante la interfaz gráfica de usuario habitual no siempre es la forma más rápida ni flexible, sobre todo si quieres automatizar tareas o ajustar la configuración rápidamente. Además, a veces la interfaz gráfica de Windows puede ser un verdadero engorro: no siempre es clara o simplemente no funciona correctamente al intentar editar desencadenadores, permisos o acciones de tipo cron. Por eso, PowerShell es una alternativa bastante práctica, que te da más control y algo de potencia para scripts. Al principio resulta un poco raro si no estás acostumbrado, pero una vez que dominas los comandos, es una auténtica revolución para gestionar tareas programadas, especialmente en servidores o al implementar cosas en varias máquinas.
Esta guía explicará cómo crear, modificar, ejecutar e incluso exportar/importar tareas programadas con PowerShell. Ya sea que quieras configurar una tarea que ejecute un script al iniciar o programar una copia de seguridad semanal, esta herramienta es muy útil. Además, puede serte de gran ayuda si tu interfaz gráfica no funciona correctamente o si prefieres usar scripts para mayor consistencia. Encontrarás comandos básicos, algunos consejos y quizás un par de momentos en los que Windows te dejará perplejo.
Cómo administrar tareas programadas de Windows mediante PowerShell
Creación de una tarea programada con PowerShell
Lo primero: crear una tarea. Olvídate de navegar por el Programador de Tareas (a menos que quieras), porque PowerShell lo hace todo con ScheduledTasksun módulo. De verdad, configurar tareas repetitivas será mucho más sencillo si te familiarizas con la sintaxis.
¿Para qué molestarse? Porque si quieres que un script se ejecute al arrancar, en momentos específicos o incluso con privilegios elevados, PowerShell puede hacerlo en pocas líneas. La idea es crear un Trigger(cuándo se ejecuta), un Action(qué hace) y un Principal(quién lo ejecuta), y luego registrarlo en el programador.
A continuación se muestra un resumen rápido de una configuración típica:
- Establecer un nombre de tarea:
$NewTaskName = "StartupScript_PS" - Seleccione la cuenta de usuario: SYSTEM es útil si desea que se ejecute independientemente de quién inicie sesión, pero para otros usuarios, especifique el nombre de usuario con
"DOMAIN\username". Tenga en cuenta que, si se ejecuta como usuario no administrador, debe tener permiso para iniciar sesión como trabajo por lotes (consulte la política local para «Iniciar sesión como trabajo por lotes»). - Ejemplo de una cuenta del sistema:
$User="NT AUTHORITY\SYSTEM"- Para un usuario específico:
$User = "woshub\sysops1"
Para crear un disparador que se ejecute todos los días a las 10:00, simplemente haga lo siguiente:
$Trigger = New-ScheduledTaskTrigger -At 10:00am -Daily
Consejo: Otras opciones de programación si te apetece picante:
- Ejecutar al inicio:
$Trigger = New-ScheduledTaskTrigger -AtStartup - Ejecutar cuando el usuario inicia sesión:
$Trigger = New-ScheduledTaskTrigger -AtLogon - Una cosa de una sola vez:
$Trigger= New-ScheduledTaskTrigger -Once -At 03:00 - Semanalmente en días específicos:
$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Wednesday -At 01:00
Ahora, configuremos lo que realmente hace la tarea. Por ejemplo, al ejecutar un script de PowerShell, podría hacer lo siguiente:
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1"
Esa -Bypassparte es bastante crucial: evita que PowerShell se asuste y se niegue a ejecutarse debido a las políticas.
Por último, para registrar la tarea en el Programador de tareas de Windows:
Register-ScheduledTask -TaskName $NewTaskName -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force
Esto -RunLevel Highestes lo que permite que se ejecute con permisos de administrador si es necesario. Si todo esto funciona, la tarea aparecerá en la biblioteca del Programador de Tareas: una buena confirmación de que está configurada.
En algunas configuraciones, usar el Register-ScheduledTaskcomando puede resultar un poco extraño la primera vez, como que diga «Listo» pero no se ejecute. Normalmente, reiniciar o ejecutar PowerShell como administrador soluciona el problema. Porque, claro, Windows tiene que complicarlo más de lo necesario.
Cambiar y gestionar tareas existentes
Si necesitas ajustar una tarea más adelante, puedes usar Set-ScheduledTask. Por ejemplo, si quieres añadir un nuevo disparador o cambiar quién la ejecuta:
$trigger1 = New-ScheduledTaskTrigger -At 05:00 -Weekly -DaysOfWeek Monday $trigger2= New-ScheduledTaskTrigger -At 05:00 -Weekly -DaysOfWeek Saturday $action = New-ScheduledTaskAction -Execute "myapp.exe" Set-ScheduledTask -TaskName StartupScript_PS -Trigger $trigger1, $trigger2 -Action $action
O, si necesita cambiar la cuenta de usuario bajo la que se ejecuta:
$task_user = New-ScheduledTaskPrincipal -UserId 'woshub\j.abrams' -RunLevel Highest $task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8' Set-ScheduledTask -TaskName StartupScript_PS -Principal $task_user -Settings $task_settings
Atención : si ves errores como «No hay correspondencia entre los nombres de cuenta y los ID de seguridad», revisa el nombre de usuario. Windows puede ser muy exigente, especialmente si manipulas cuentas de dominio o locales.
Administrar tareas sobre la marcha y comprobar qué se está ejecutando
Para ver las tareas activas, ejecute:
Get-ScheduledTask -TaskPath | ? { $_. State -ne 'Disabled' }
Muestra cuándo se ejecutó por última vez, si tuvo errores y cuándo se programará la próxima vez. Resulta útil si estás solucionando problemas o simplemente intentando comprobar si tu nueva configuración funciona.
¿Quieres finalizar una tarea ahora mismo? Start-ScheduledTask -TaskName CheckServiceState¡Genial! Ejecútala inmediatamente. Y si alguna vez quieres eliminar una tarea, simplemente ejecuta:
Unregister-ScheduledTask -TaskName CheckServiceState
Tareas de exportación e importación: compartir es cuidar
Esta parte es bastante interesante: exportar configuraciones a XML para que puedas copiarlas o hacer una copia de seguridad:
Export-ScheduledTask -TaskName StartupScript | Out-File c:\tmp\StartupScript.xml
¿Y para importar esa copia de seguridad a una PC nueva? Simplemente haz lo siguiente:
Register-ScheduledTask -Xml (Get-Content "C:\tmp\StartupScript.xml" | Out-String) -TaskName "StartupScript"
Esto es muy útil al implementar en varias máquinas o cuando se desea mantener una copia de seguridad de la configuración de tareas perfectamente ajustada. En entornos empresariales, también se pueden implementar tareas programadas mediante la directiva de grupo, lo cual, como era de esperar, suele ser la mejor opción si se administran docenas o cientos de máquinas.
Con suerte, esto te ahorrará algunas horas si te quedabas atascado haciendo clic sin parar. PowerShell tiene todas las funciones: una vez que entiendes la sintaxis, te ahorra mucho tiempo.
Resumen
- Utilice comandos de PowerShell para crear, editar y administrar tareas programadas.
- Los activadores son flexibles: se ejecutan al inicio, al iniciar sesión, en momentos específicos o semanalmente.
- Las acciones pueden ser scripts, programas o comandos.
- Exporte e importe tareas fácilmente a través de archivos XML.
- PowerShell + Programador de tareas es mucho más flexible y automatizable que la GUI.
Resumen
Configurar tus tareas programadas con PowerShell puede parecer un poco intimidante al principio, pero realmente vale la pena. Es más rápido, más fácil de automatizar y facilita enormemente la gestión de varias máquinas. Una vez que te familiarices con los comandos, te preguntarás por qué te molestaste en navegar por la interfaz gráfica. Recuerda que a veces Windows falla y necesitas reiniciar o ejecutar PowerShell como administrador, así que no te frustres al principio. Pero una vez que lo domines, gestionar las tareas programadas será pan comido.