Cómo Automatizar Scripts de PowerShell con el Programador de Tareas

El Programador de Tareas de Microsoft Windows puede ayudarle a lanzar automáticamente un programa o un script de PowerShell a una hora determinada o cuando se cumplan ciertas condiciones. También puede programar el envío de correos electrónicos e incluso la visualización de ciertos mensajes. En este blog, le mostraremos cómo ejecutar un script de PowerShell desde el Programador de tareas que alertará sobre cualquier instalación de software en un equipo local.

También crearemos tareas programadas utilizando scripts de PowerShell. Aprenderá a:

  • Crear tareas con el Programador de Tareas
  • Modificar o eliminar tareas programadas
  • Crear tareas programadas con scripts de PowerShell.

Crear tareas con el Programador de Tareas

Abra el Programador de Tareas pulsando «Windows+R» y escribiendo luego «taskschd.msc» en la ventana que se abre. A continuación, siga los siguientes pasos:

1. Haga clic en «Crear una tarea» e introduzca un nombre y una descripción para la nueva tarea. Para ejecutar el programa con privilegios de administrador, marque la casilla «Ejecutar con los máximos privilegios». En nuestro ejemplo, asignaremos una cuenta de servicio para ejecutar la tarea, y la ejecutaremos independientemente de que el usuario esté conectado.

2. Cambie a la pestaña Disparadores y haga clic en el botón «Nuevo…». Aquí puede especificar las condiciones que desencadenan la ejecución de la tarea. Por ejemplo, puede hacer que se ejecute según un horario, al iniciar la sesión, al estar inactivo, al arrancar o cuando se produzca un evento concreto. Queremos que nuestra tarea se desencadene con cualquier nueva instalación de software, así que elegimos «En un evento» en el menú desplegable y seleccionamos «Aplicación» en la configuración del registro. Deja el parámetro «Fuente» en blanco y establece el EventID como «11707». Haga clic en «Aceptar» para guardar los cambios.

3. Navegue hasta la pestaña «Acciones» y haga clic en «Nuevo…». Aquí puede especificar las acciones que se ejecutarán siempre que se cumplan las condiciones de activación. Por ejemplo, puede enviar un correo electrónico o mostrar un mensaje. En nuestro caso, queremos iniciar un programa, por lo que debemos crear el script PowerShell que queremos ejecutar y guardarlo con la extensión «ps1». Puedes encontrar el script aquí; enviará una alerta con los detalles del evento sobre el software instalado.

Para programar el script de PowerShell, especifica los siguientes parámetros:

  • Acción: Iniciar un programa
  • Programa: powershell
  • Añadir argumentos (opcional): -Archivo

Haga clic en «Aceptar» para guardar los cambios.

4. La pestaña «Condiciones» permite especificar las condiciones que, junto con el activador, determinan si la tarea debe ejecutarse. En nuestro caso, debemos dejar la configuración por defecto en esta pestaña.

5. En la pestaña «Configuración» también se pueden configurar parámetros adicionales para la tarea programada. Para nuestro ejemplo, sin embargo, los dejaremos sin cambios.

6. Cuando la tarea esté completamente configurada, el sistema le pedirá la contraseña de la cuenta de servicio. Tenga en cuenta que esta cuenta debe tener el derecho de «Iniciar sesión como trabajo por lotes». Introduzca la contraseña y haga clic en «Aceptar» para guardar la tarea.
7. Para que el Programador de tareas funcione correctamente, el servicio Programador de tareas debe estar configurado para iniciarse Ejecute «Services.msc». En la lista de servicios, busque el Programador de tareas y haga doble clic en él. En la pestaña General, establezca el tipo de inicio en «Automático» y haga clic en Aceptar para guardar el cambio.

Ahora, cada vez que se instale un nuevo software en su Microsoft Windows Server, se le notificará a través de un correo electrónico que detalla la hora de la instalación, el nombre del software y el ID de usuario (SID) de la persona que lo instaló.

Modificación o eliminación de tareas programadas

Para modificar una tarea existente, haga clic con el botón derecho del ratón en la lista, seleccione Propiedades, edite la configuración necesaria y haga clic en Aceptar. Para eliminar una tarea programada, haga clic con el botón derecho en ella, seleccione Eliminar y confirme la acción.

Creación de tareas programadas con scripts de PowerShell

Ahora que sabe cómo crear una tarea mediante el Programador de tareas, descubramos cómo crear una tarea programada mediante PowerShell. Supongamos que queremos que nuestra tarea se lance diariamente a las 10 de la mañana, y que debe ejecutar el script de PowerShell que puedes encontrar aquí, que monitorizará los cambios en la pertenencia a grupos en el sitio de Active Directory.

En Windows Powershell 2.0 (Windows 7, Windows Server 2008 R2), para crear una tarea programada, debes utilizar el módulo TaskScheduler. Instale el módulo ejecutando el comando «Import-Module TaskScheduler» y utilice el siguiente script para crear una tarea que ejecute el script de PowerShell denominado GroupMembershipChanges.ps1 diariamente a las 10 AM:

Import-Module TaskScheduler $task = New-Task$task.Settings.Hidden = $trueAdd-TaskAction -Task $task -Path C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe –Arguments "-File C:\Scripts\GroupMembershipChanges.ps1"Add-TaskTrigger -Task $task -Daily -At "10:00"Register-ScheduledJob –Name "Monitor Group Management" -Task $task

Windows PowerShell 4.0 (Windows Server 2012 R2 y superior) no incluye el módulo Task Scheduler, por lo que este script no funcionará. En su lugar, PowerShell 3.0 y 4.0 introdujeron nuevos cmdlets para crear tareas programadas, New-ScheduledTaskTrigger y Register-ScheduledTask, que hacen que la creación de una tarea programada sea mucho más fácil y cómoda. Así que vamos a crear una tarea que ejecutará nuestro script diariamente a las 10 AM usando la cuenta del sistema (SYSTEM). Esta tarea será ejecutada por una cuenta con privilegios elevados.

$Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily # Specify the trigger settings$User= "NT AUTHORITY\SYSTEM" # Specify the account to run the script$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript.ps1" # Specify what program to run and with its parametersRegister-ScheduledTask -TaskName "MonitorGroupMembership" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force # Specify the name of the task

Otras opciones de activación que podrían ser útiles en la creación de nuevas tareas incluyen:

  • -AtStartup – Activa su tarea en el inicio de Windows.
  • -AtLogon – Activa su tarea cuando el usuario inicia sesión.
  • -Once – Activa su tarea una vez. Puede establecer un intervalo de repetición utilizando el parámetro -RepetitionInterval.
  • -Weekly – Dispara su tarea una vez a la semana.

Note que, usando estos cmdlets, no es posible disparar la ejecución «en un evento» como lo hicimos con la herramienta del Programador de Tareas. Los scripts de PowerShell con disparadores «en un evento» son mucho más complicados, por lo que esta es una verdadera desventaja de utilizar PowerShell en lugar del Programador de tareas.

Conclusión

Como puede ver, es fácil crear tareas programadas utilizando el Programador de tareas o PowerShell. Pero recuerde que los cambios inadecuados en sus tareas programadas pueden causar interrupciones del servicio y degradar el rendimiento del servidor. Por lo tanto, es esencial hacer un seguimiento de todos los cambios en sus tareas programadas.

Jeff es Director de Ingeniería de Soluciones Globales en Netwrix. Es un bloguero, orador y presentador de Netwrix desde hace mucho tiempo. En el blog de Netwrix, Jeff comparte lifehacks, consejos y trucos que pueden mejorar drásticamente su experiencia de administración de sistemas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.