Adam the Automator

¿Necesita crear muchas tareas programadas o automatizar la creación de tareas programadas? Si es así, estás de suerte. En este artículo, aprenderá a administrar tareas programadas con PowerShell.

Las tareas programadas que realizan acciones simples son rápidas de realizar y lo suficientemente cómodas como para repetirlas con la interfaz de la aplicación Programador de tareas (GUI). Sin embargo, los administradores o desarrolladores del sistema pueden necesitar implementar tareas más complicadas con múltiples programaciones, disparadores o argumentos.

Afortunadamente, puede usar PowerShell para crear y administrar tareas programadas. La administración de tareas programadas con PowerShell es posible gracias al uso del módulo Tareas programadas integrado en Windows.

Tabla de Contenidos

Requisitos

Dado que este es un aprender-haciendo el tipo de artículo, hay algunos requisitos previos para que pueda seguir a lo largo. A continuación se muestran los requisitos para crear tareas programadas de PowerShell con PowerShell.

  • Los ejemplos de este artículo utilizan Windows 10. Pero Windows Server 2012 y posteriores pueden hacer lo mismo.
  • Windows PowerShell 5.1 o PowerShell 7.
  • Sería útil tener un editor de scripts como Visual Studio Code, Notepad++ o ISE de Windows PowerShell.

Crear una nueva tarea programada

Una tarea programada requiere un mínimo de dos componentes para funcionar; acción y activación. Agregar un contexto de seguridad y un conjunto de configuraciones relacionadas es opcional. Para una mejor comprensión, consulte la breve explicación de cada componente de tarea programada a continuación:

  • Acción: la acción que ejecuta la tarea programada. Una acción normalmente consiste en ejecutar un programa o un script. Una tarea programada puede tener más de una acción.
  • Desencadenador: controla cuando se ejecuta la tarea programada. Los disparadores pueden estar basados en el tiempo, como establecer un horario para la recurrencia diaria u horaria. Los disparadores también pueden basarse en actividades, lo que ejecuta una tarea en función de actividades detectadas, como el inicio de un equipo, el inicio de sesión de un usuario o los eventos registrados.
  • Principal: controla el contexto de seguridad utilizado para ejecutar la tarea programada. Entre otras cosas, un principal incluye la cuenta de usuario y el privilegio requerido utilizado por la tarea programada.
  • Configuración: es un conjunto de opciones y condiciones que controla el comportamiento de la tarea programada. Por ejemplo, puede personalizar una tarea para que se elimine después de un número de días consecutivos en los que la tarea no se utiliza.

Durante la creación de una tarea programada, el principal y la configuración no se requieren explícitamente. En su lugar, se utilizan los valores predeterminados.

Crear una acción de tarea

Cuando desee que una tarea programada haga algo, cree una nueva acción de tarea. En este ejemplo, creará una tarea que llamará a PowerShell.exe y ejecuta un script. Asegúrate de tener tu editor de guiones listo.

Tenga en cuenta que el script de abajo es solo un ejemplo aleatorio y no está obligado a usarlo. Puede usar cualquier script que desee. Sin embargo, el uso del script a continuación crea un resultado fácilmente verificable que puede confirmar si la tarea programada funcionó.

El script de ejemplo a continuación, cuando se ejecuta, obtiene los diez últimos eventos del registro de eventos de la aplicación. A continuación, exporte los eventos a un nuevo archivo XML en el c:\temp carpeta. Copie el código a continuación, péguelo en su editor de scripts y guárdelo con el nombre de archivo Get-LatestAppLog.ps1 en la carpeta que desee.

El siguiente código utiliza el New-ScheduledTaskAction para crear un nuevo objeto de acción de tarea programada almacenado en la variable $taskAction. Esta acción llamará al ejecutable powershell.exe y pasará el argumento para ejecutar el C:\scripts\Get-LatestAppLog.ps1.

Copie el comando anterior y ejecútelo en PowerShell. El objeto resultante en la variable $taskAction debería parecerse a la imagen siguiente.

Crear una nueva Acción de tarea programada

Agregar un disparador

Ahora que tiene una acción de tarea creada, la siguiente el paso es definir cuándo debe ejecutarse la tarea. El cmdlet que se utilizará para crear un desencadenador es el cmdlet New-ScheduledTaskTrigger. El siguiente comando crea un disparador que se ejecuta diariamente a las 3 PM. Copie y ejecute el código en PowerShell.

# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger

El objeto resultante en la variable $tasktrigger debería tener el mismo aspecto que la imagen de abajo.

Creando un Disparador (Diariamente a las 3 AM)

Registrando la tarea

Hasta ahora, ha creado la base requisitos para crear una nueva tarea programada. El siguiente paso es crear la tarea programada y registrarla en el sistema.

El código siguiente utiliza el cmdlet Register-ScheduledTask para registrar la tarea programada. El parámetro -Action es necesario para pasar el objeto de acción de tarea almacenado en la variable denominada $taskAction. El parámetro -Trigger es necesario para pasar el contenido de la variable $taskTrigger.

# Register the new PowerShell scheduled task# The name of your scheduled task.$taskName = "ExportAppLog"# Describe the scheduled task.$description = "Export the 10 newest events in the application log"# Register the scheduled taskRegister-ScheduledTask ` -TaskName $taskName ` -Action $taskAction ` -Trigger $taskTrigger ` -Description $description

Copie el código anterior y ejecútelo en PowerShell. Como resultado, se registra la nueva tarea programada, como se muestra a continuación.

Registrar la nueva tarea programada

la Ejecución de la Tarea

Después de crear una tarea programada, usted debe confirmar que la tarea programada que ahora existe en el sistema. Abra el Programador de tareas y busque la tarea programada en la lista. Debería ver la tarea registrada en la lista.

La nueva tarea programada como se ve en la aplicación Programador de tareas

También puede confirmar que la tarea programada registrada existe ejecutando el comando de PowerShell a continuación.

Get-ScheduledTaskInfo -TaskName ExportAppLog

Debería ver una salida similar, como la captura de pantalla del resultado a continuación.

Obtener la información de la tarea programada.

Y, finalmente, su nueva tarea programada debería funcionar para determinar si lo que hizo hasta ahora fue exitoso. Para probar la tarea programada, puede esperar a la próxima programación de ejecución o usar el comando a continuación para activarla manualmente.

Start-ScheduledTask -TaskName ExportAppLog

Después de ejecutar el código, debería ver un resultado similar al que se muestra a continuación. Como puede ver, al ejecutar el código se creó un archivo XML, que indica que la tarea programada funcionó como se esperaba.

Ejecutar la Tarea programada

Actualizar una Tarea Programada existente

Después de crear una tarea programada, es posible que algunos aspectos de actualización en algún momento. Tal vez desee hacer que se ejecute una hora antes o cambiar la ubicación del archivo de script. Estos son algunos de los cambios en la tarea programada que pueden ser necesarios.

En las siguientes secciones, aprenderá a realizar cambios en las tareas programadas registradas existentes mediante PowerShell.

Cambiar la Cuenta de usuario, las Opciones de seguridad y la Configuración de compatibilidad

En la sección anterior, la tarea programada se ejecuta en el mismo contexto de cuenta de usuario que la creó. Qué pasa si la tarea necesita ejecutarse con otra cuenta de usuario, como una cuenta de servicio, por ejemplo.

En este ejemplo, modificará las opciones de seguridad de la tarea programada a la siguiente configuración.

  • Debe cambiar la cuenta de usuario para ejecutar la tarea programada.
  • Permitir que la tarea se ejecute tanto si el usuario ha iniciado sesión como si no.
  • Ejecute el con los niveles más altos de privilegios.
  • Establezca la compatibilidad de la tarea en Windows 10.

La primera línea del siguiente código creará un objeto principal con la nueva cuenta de usuario y establecerá que la tarea se ejecute con los privilegios más altos. Asegúrese de cambiar el valor del parámetro -UserID según sea necesario. La segunda línea configura la compatibilidad de la tarea con Windows 10.

Finalmente, la tercera línea actualiza la tarea programada ExportAppLog **utilizando los valores almacenados en las variables the $taskPrincipal y $taskSettings. Copie el siguiente código y ejecútelo en PowerShell.

# Set the task principal's user ID and run level.$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'DEVPC\svcTask' -RunLevel Highest# Set the task compatibility value to Windows 10.$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8# Update the task principal settingsSet-ScheduledTask -TaskName 'ExportAppLog' -Principal $taskPrincipal -Settings $taskSettings

Usted notará que el -Compatibility valor del parámetro Win8. No te confundas. Parece que Microsoft no ha actualizado la selección de la versión «más reciente» desde Windows 8. Sin embargo, especificar el valor Win8 dará como resultado la compatibilidad con Windows 10.

A continuación, el comando siguiente utiliza el cmdlet Set-ScheduledTask para actualizar la tarea programada existente ExportAppLog**. Asegúrese de cambiar el valor de la contraseña en el parámetro -Password para usar la contraseña correcta de la cuenta de usuario.

# Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'

Después de ejecutar el comando anterior, la tarea programada se actualiza. Si marca la tarea programada, puede confirmar que las opciones de seguridad han cambiado.

La opción de seguridad, cuenta de usuario, y la configuración de compatibilidad

Cambiar el Gatillo

a Veces el disparador calendario debe ser cambiado. Tal vez debido a algunos ajustes operativos u optimización de recursos. En cualquier caso, también puede usar PowerShell para reemplazar o agregar desencadenadores a una tarea programada.

Actualmente, la tarea programada ExportAppLog se activa todos los días a las 3 de la tarde. Supongamos que necesita cambiar el horario de activación a diario a las 4:30 PM y a la 1: 00 AM. Primero debe crear dos nuevos objetos desencadenadores de tareas para las dos programaciones.

$taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM

Luego, para actualizar el desencadenador de la tarea programada, use el comando a continuación. Notará que el parámetro -Trigger acepta los dos objetos desencadenadores de tareas, a saber, $taskTrigger1 y $taskTrigger2.

Además, dado que está actualizando una tarea programada con una contraseña guardada para la cuenta de usuario, deberá proporcionar de nuevo los valores -User y -Password.

Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'

A continuación se muestra el resultado esperado después de ejecutar el código.

Actualización de la tarea programada con múltiples disparos

Y como se puede ver abajo, ahora hay dos factores en el ExportAppLog tarea programada.

La tarea Programada con múltiples disparos

Eliminar y Restaurar una Tarea Programada

Tareas Programadas pueden volverse obsoletos con el tiempo. En algún momento, es posible que deba realizar tareas de limpieza para las tareas programadas. En esta sección, aprenderá a administrar la eliminación de tareas programadas en PowerShell.

Copia de seguridad de una tarea programada

Antes de continuar eliminando tareas programadas, es una buena práctica hacer una copia de seguridad primero. Hacer copias de seguridad de las tareas programadas le da un punto de restauración para cuando las cosas salen mal.

No hay un cmdlet integrado para hacer una copia de seguridad de tareas programadas. Sin embargo, todo en PowerShell es un objeto y es posible exportar objetos a un archivo. Cuando necesite hacer una copia de seguridad de un objeto en un archivo, utilice el cmdlet Import-Clixml.

El siguiente código de ejemplo exporta la tarea programada con el nombre ExportAppLog a un archivo. Puede cambiar el nombre de archivo y la ubicación según sus preferencias.

La siguiente imagen muestra el archivo XML de salida esperado.

Hacer una copia de seguridad de una tarea programada

Eliminar una tarea programada

Una vez que haya asegurado una copia de seguridad de la tarea programada, ahora puede eliminar esa tarea programada. El siguiente código elimina la tarea programada con el nombre ExportAppLog. Copie el código que aparece a continuación y ejecútelo en PowerShell.

# Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false

Aunque no es obligatorio, siempre es bueno confirmar el resultado de la tarea programada de la eliminación. Utilice el siguiente comando para verificar que la tarea programada ya no existe.

Get-ScheduledTask -TaskName 'ExportAppLog'

Si la tarea programada ya no existe, debería obtener una salida como la que se muestra a continuación.

Comprobar si la tarea programada ya no existe

Tenga en cuenta que la copia de seguridad de tareas programadas no incluye contraseñas.

Restaurar una Tarea Programada

Así que he eliminado la tarea programada, y luego resulta que no debía! ¿Ahora qué? Este tipo de situación hace que aprecies aún más el concepto de copias de seguridad.

Puede volver a crear la tarea programada utilizando el archivo de copia de seguridad XML con PowerShell. Y así es como puedes hacer la restauración.

Primero, importe la copia de seguridad XML en su sesión de PowerShell. El siguiente código importa el archivo c:\temp\ExportAppLog.XML. Como resultado, la variable $stBackup almacenará los datos importados.

# Import the Schedule Task backup$stBackup = Import-Clixml -Path c:\temp\ExportAppLog.xml

a continuación, utilice el código siguiente para restablecer la tarea del director de LogOnType valor Interactive. Restablecer el valor LogonType es fundamental para garantizar la restauración de tareas programadas con éxito.

# Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'

El siguiente paso es crear un nuevo objeto de tarea programada. El siguiente código crea una nueva tarea programada. La variable $restoreTask almacena el objeto de tarea programada resultante.

Notará que los valores pasados a los parámetros son los importados desde la copia de seguridad. Los valores importados están en la variable $restoreTask. Los parámetros son: ActionTriggerSettings y Principal.

Después de crear la tarea programada objeto, es el momento de registrar la tarea programada. Utilice el siguiente código para registrar la tarea programada restaurada.

En este ejemplo, el nombre de la tarea es ‘ExportAppLog_restored.’El parámetro InputObject acepta el objeto de tarea programada en la variable $restoreTask. Asegúrese de utilizar el correcto user y password valores.

El código ya está completo. Copie y ejecute el código en PowerShell para restaurar la tarea programada eliminada. La siguiente imagen muestra el resultado esperado después de ejecutar el código.

Restaurar eliminado tarea programada desde un XML de copia de seguridad

Ahora, la tarea programada es registrado en el sistema. La imagen siguiente muestra la tarea programada restaurada.

Encontrar la tarea programada restaurada

Resumen

La función de tareas programadas en Windows es una excelente herramienta para configurar tareas o trabajos. Puede crear de las tareas más básicas a las más complejas. La configuración y las opciones son flexibles.

Con el módulo Tareas programadas de PowerShell, es posible configurar tareas programadas mediante comandos de PowerShell. Este módulo proporciona la oportunidad y los medios para crear e implementar tareas programadas mediante programación en los equipos locales y remotos.

Microsoft no ha actualizado el módulo Tareas programadas y algunas configuraciones avanzadas aún no se exponen fácilmente como cmdlets de PowerShell. Un ejemplo es crear un disparador para «Desbloqueo en la estación de trabajo».»Sin embargo, puede lograr estos ajustes avanzados utilizando la clase CIM del programador de tareas existente.

Sin embargo, el módulo Tareas programadas de PowerShell sigue siendo una herramienta excelente y capaz que puede agregar a su arsenal de PowerShell.

Deja una respuesta

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