Cómo crear una tarea programada de PowerShell
Los scripts de PowerShell son una excelente manera de automatizar tareas diarias o generar informes semanales. Pero, ¿cómo se crea una tarea programada para los scripts de PowerShell? Podemos hacer esto con el programador de tareas para ejecutar un script de PowerShell o crear la tarea en PowerShell.
La ventaja de las tareas programadas es que puedes configurarlas y olvidarlas. Se ejecutarán en segundo plano y actualizarán sus sistemas o generarán los informes que de otro modo tendría que hacer manualmente.
En este artículo, veremos cómo ejecutar un script de PowerShell con el programador de tareas y cómo crear una tarea programada en PowerShell.
Utilice el Programador de tareas para ejecutar un script de PowerShell
La primera opción que veremos es usar el programador de tareas de Windows para ejecutar un script de PowerShell. ¡El Programador de tareas de Windows se origina en Windows 95! y es una excelente manera de programar tareas en Windows.
Para ejecutar scripts de PowerShell con el programador de tareas, no podemos simplemente seleccionar el archivo de PowerShell que queremos programar. Lo que vamos a hacer es ejecutar el “programa” PowerShell y usar los argumentos para seleccionar el archivo que queremos ejecutar.
Tiempo necesario: 2 minutos
Abrir el Programador de tareas
Haga clic en Inicio y escriba "Programador de tareas" para abrirlo. O selecciónelo en el menú Inicio en Herramientas administrativas de Windows (o Herramientas de Windows cuando usa Win 11)
Crear una nueva tarea básica
Haz clic en Crear tareas básicas… en la barra de acciones del lado derecho y dale un nombre a tu tarea.
(Recomiendo organizar tus tareas en carpetas, crearlas en el lado izquierdo primero)Programar la tarea
El disparador determina cuándo se debe ejecutar la tarea. Elija un activador, por ejemplo, Semanal, y haga clic en Siguiente para configurar cuándo se deben ejecutar exactamente las tareas.
Establecer la acción
Aquí viene la parte importante, para la acción vamos a Iniciar un Programa
Iniciar un programa - PowerShell
El programa que queremos ejecutar es PowerShell. Simplemente ingrese PowerShell en el campo Programa/Script (vea la captura de pantalla en el paso 6), no necesita encontrar la ruta exacta al ejecutable.
Agregar argumentos
En el campo de argumentos, agregaremos el argumento
-Filey la ruta al script de PowerShell. También es una buena idea agregar el modificador de PowerShell-NoProfiley establecer-ExecutionPolicyen ByPass.
Si sus scripts requieren algún parámetro, entonces usted Puede agregarlos después de la ruta (por ejemplo, el parámetro -Output):-NoProfile -ExecutionPolicy Bypass -File "C: \scripts\ADHealth.ps1" -Salida "HTML"Empezar en
Configure siempre la ubicación Iniciar en en la misma ruta donde se encuentra su secuencia de comandos. De esta manera, cualquier exportación que genere su secuencia de comandos se almacenará en la misma ubicación que su secuencia de comandos. De lo contrario, la salida se guardará en C:\Windows\System32
Terminar
Haga clic en Siguiente y revise su configuración en la pantalla de finalización. Asegúrese de seleccionar Abrir el cuadro de diálogo de propiedades... para que configuremos algunas configuraciones más.
Configuración avanzada
Hay dos configuraciones que debemos cambiar para nuestra tarea programada de PowerShell. Necesitaremos asegurarnos de que el script se ejecute incluso cuando no hayamos iniciado sesión, lo cual se hace en la pestaña General.
Y queremos asegurarnos de que el script se detenga si se ejecuta durante más de un día. Cambie esta configuración en Configuración y establezca Detener la tarea si dura más de en 1 día o menos.Guardar la tarea
Haga clic en Aceptar e ingrese su contraseña, para que la tarea pueda ejecutarse cuando no haya iniciado sesión. Siempre es una buena idea probar su tarea, hacer clic derecho sobre ella y elegir Ejecutar para ejecutar la tarea ahora.
Utilice PowerShell para crear tareas programadas
Por supuesto, también podemos utilizar PowerShell para crear y gestionar tareas programadas. Crear una tarea programada en PowerShell requiere un par de pasos. Para cada paso, hay un cmdlet diferente que usaremos.
Para crear la tarea programada vamos a utilizar los siguientes cmdlets:
- New-ScheduledTaskTrigger
Crea un objeto desencadenante para una tarea programada
- New-ScheduledTaskAction
Crea la acción para una tarea programada.
- Register-ScheduledTask
Registra una tarea programada
- Get-ScheduledTask
Mostrar las tareas programadas
Para crear una tarea programada en PowerShell necesitaremos definir al menos el Activador y la Acción para la tarea. Entonces, para crear una tarea simple que se ejecute todos los viernes y ejecute un script de PowerShell, podemos hacer lo siguiente:
$taskTrigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 3am
$taskAction = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-NoProfile -ExecutionPolicy Bypass -File 'C:\scripts\ADHealth.ps1' -Output 'HTML'" -WorkingDirectory 'c:\scripts'
Register-ScheduledTask 'Lazy PS Tasks' -Action $taskAction -Trigger $taskTriggerEsto creará exactamente la misma tarea que hemos creado con el programador de tareas. Pero expliquemos cada uno de los cmdlets para ver qué opciones tenemos.
Creando el disparador - New-ScheduledTaskTrigger
El primer paso es definir el desencadenante. Esto determina cuándo queremos ejecutar la tarea. Al igual que con el programador de tareas, podemos definir múltiples desencadenantes para nuestra tarea.
El cmdlet New-ScheduledTaskTrigger viene con un par de parámetros que le permiten definir cuándo desea que se ejecute la tarea:
- AtLogOn: ejecuta la tarea cuando un usuario inicia sesión
- AtStartup: cuando se inicia el sistema
- A las : se usa una vez, diariamente o semanalmente. Define el tiempo específico para ejecutar la tarea.
- Diario: se ejecuta todos los días. Definir los días con DaysOfWeek
- DaysInterval: se ejecuta cada x días
- DaysOfWeek: se puede utilizar con Daily o Weekly. Define qué días ejecutar la tarea.
- Semanal: ejecuta las tareas cada semana.
- WeeklyInterval: determina el intervalo entre las semanas.
Entonces, para ejecutar la tarea todas las semanas los martes y jueves a las 08:30 a. m., podemos crear el siguiente activador:
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 8:30amDefinición de la acción: nueva acción de tarea programada
Para crear la acción de tarea programada en PowerShell necesitaremos definir qué programa queremos que se ejecute, los argumentos (la ruta a los scripts de PowerShell, por ejemplo) y, opcionalmente, el directorio de trabajo.
Entonces, para ejecutar nuestro script de PowerShell, estableceremos el parámetro -Execute en PowerShell y definiremos la ruta del archivo y otros parámetros en el parámetro -Argument. Si sus secuencias de comandos lo requieren, puede establecer el parámetro -WorkingDirectory en la ruta de su secuencia de comandos.
$action = New-ScheduledTaskAction -Execute 'PowerShell' -Argument '-NoProfile -ExecutionPolicy Bypass -File "C:\scripts\ADHealth.ps1" -Output "HTML"'
Creación de la tarea: registro-tarea programada
Con el disparador y la acción definidos, podemos crear y registrar la tarea programada. Necesitaremos darle un nombre a nuestra tarea y recomiendo agregar también una TaskPath (carpeta). Esto hará que sea más fácil recuperar sus tareas más adelante.
Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTriggerComo se mencionó, puede definir múltiples desencadenantes y acciones para su tarea. Para hacer esto, necesitará agregar el disparador o las acciones en una matriz. Por ejemplo, para ejecutar la tarea todos los martes y jueves y el primer día del mes podemos hacer:
# Define the triggers for Tuesday and Thursday at 08:30 AM and when a user logs on
$taskTriggers = @(
New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 08:30,
New-ScheduledTaskTrigger -AtLogon
)
Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTriggersEjecutar la tarea con diferentes privilegios
Cuando creamos la tarea de PowerShell con la Tarea programada, habilitamos la opción para ejecutar la tarea independientemente de que un usuario haya iniciado sesión o no. Para ello, también necesitábamos proporcionar el nombre de usuario y la contraseña para ejecutar la tarea. Además, necesitaremos establecer el parámetro -RunLevel de la tarea en más alto:
Register-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks' -Action $taskAction -Trigger $taskTrigger -User "lazyadmin\Administrator" -Password 'yourPass123' -RunLevel Highest
Ver la tarea programada
Puede ver las tareas creadas en el programador de tareas. Pero también puedes recuperar la tarea programada con PowerShell. Para ello, necesitaremos utilizar el cmdlet Get-ScheduledTask. Si ejecuta el cmdlet sin ningún parámetro, recuperará todas las tareas programadas en su computadora.
Y como puedes ver, eso es bastante. Por eso es importante organizar sus tareas en carpetas utilizando el parámetro taskPath. De esta manera puede usar el parámetro TaskPath para ver solo nuestras tareas:
Get-ScheduledTask -TaskPath \LazyTasks\La ruta de la tarea siempre comienza y termina con una barra invertida \. Para ver sus tareas, deberá proporcionar el nombre de la tarea. Si el nombre es único, entonces el nombre por sí solo será suficiente. De lo contrario, deberás proporcionar también la ruta:
Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select *Como puede ver en la captura de pantalla anterior, no podemos ver todos los detalles de la tarea. Para ver las Acciones o Desencadenadores necesitaremos expandir las propiedades. Podemos hacer esto usando el método ExpandProperty o guardando los resultados en una variable:
Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select -ExpandProperty Triggers
# Or
$task = Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\
$task.TriggersActualizar tareas
Para actualizar las tareas programadas con PowerShell, puede utilizar el cmdlet Set-ScheduledTask. Funciona de manera similar al cmdlet Register-ScheduledTask. Simplemente cree primero un nuevo disparador o acción y luego agréguelo tal como lo haría cuando lo crearía.
# Define new trigger
$newTrigger= New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 08:30
# Update the task
Set-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks'-Trigger $newTriggerConcluyendo
La programación de tareas de PowerShell se puede realizar tanto con el Programador de tareas como en PowerShell con el cmdlet Register-ScheduledTask. Personalmente, me resulta más fácil crear la tarea usando PowerShell, pero para modificarla me resulta más conveniente el programador de tareas.
Sin embargo, puede utilizar ambas opciones para programar sus scripts de PowerShell. Espero que este artículo te haya resultado útil. Si tienes alguna pregunta, deja un comentario a continuación.






