¿Cómo crear y administrar tareas programadas con PowerShell?

La mayoría de los usuarios y administradores utilizan el taskschd.msc consola de interfaz gráfica para crear y administrar tareas programadas en Windows. Sin embargo, en varios scripts y flujos automatizados, es mucho más conveniente usar las funciones de PowerShell para crear tareas programadas. En este artículo, le mostraremos cómo crear y administrar tareas del Programador de Windows usando PowerShell.

Administrar tareas programadas en Windows a través de PowerShell

los Tareas programadas El módulo PowerShell se usa para administrar tareas programadas en Windows 10/Windows Server 2016. Puede enumerar los cmdlets en un módulo de la siguiente manera:

Get-Command -Module ScheduledTasks

  • Deshabilitar tarea programada
  • Habilitar tarea programada
  • Tarea programada de exportación
  • Get-ClusteredScheduledTask
  • Get-ScheduledTask
  • Get-ScheduledTaskInfo
  • Nueva tarea programada
  • New-ScheduledTaskAction
  • Nuevo principal de tareas programadas
  • Nuevo conjunto de configuración de tareas programadas
  • Nuevo desencadenador de tareas programadas
  • Register-ClusteredScheduledTask
  • Tarea programada de registro
  • Conjunto-ClusteredScheduledTask
  • Establecer tarea programada
  • Tarea programada de inicio
  • Stop-ScheduledTask
  • Unregister-ClusteredScheduledTask
  • Unregister-ScheduledTask

administrar tareas programadas a través de powershell

Insinuación. Anteriormente, la herramienta de consola integrada schtasks.exe se usó en Windows para crear y administrar trabajos del programador.

Creación de tareas programadas con Windows PowerShell

En las versiones modernas de PowerShell (a partir de PowerShell 3.0 en Windows Server 2012/Windows 8), puede usar el Nuevo desencadenador de tareas programadas y Tarea programada de registro cmdlets para crear tareas programadas.

Supongamos que necesitamos crear una tarea programada que debería ejecutarse durante el inicio (o en un momento específico) y ejecutar algún script o comando de PowerShell. Vamos a crear una tarea programada llamada StartupScript1. Esta tarea debe ejecutar el archivo de script de PowerShell C:PSStartupScript.ps1 a las 10:00 a. m. todos los días. La tarea se ejecutará con privilegios elevados (casilla de verificación «Ejecutar con los privilegios más altos») en la cuenta del SISTEMA.

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITYSYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:PSStartupScript1.ps1"
Register-ScheduledTask -TaskName "StartupScript1" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Si la tarea se creó con éxito, aparece el estado «Listo».

crear una tarea programada con el cmdlet de PowerShell Register-ScheduledTask

Su secuencia de comandos de PowerShell se ejecutará según la programación especificada. Si tiene una política de ejecución de PowerShell habilitada en su computadora que evita que se ejecuten los scripts de PS1, puede ejecutar un script de PowerShell desde una tarea programada con el –Bypass parámetro.

Utilice este código al crear una nueva tarea:

$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:PSStartupScript.ps1"

Consejo. Si desea que la tarea se ejecute cada vez que se inicia la computadora, el primer comando debe ser el siguiente:
$Trigger= New-ScheduledTaskTrigger -AtStartup

Si desea ejecutar una tarea cuando un usuario inicia sesión:
$Trigger= New-ScheduledTaskTrigger -AtLogon

Abre el taskschd.msc consola y asegúrese de tener una nueva tarea del programador en la Biblioteca del Programador de tareas.

nueva tarea aparece en la consola del programador de tareas

En Powershell 2.0 (Windows 7, Windows Server 2008 R2), para crear una tarea programada desde PowerShell puede usar el Horarios de servicio Interfaz COM (o actualizar la versión de PowerShell). En este ejemplo, creamos una tarea programada que ejecutará el archivo específico que contiene el script de PowerShell durante el inicio. La tarea se realiza con el NT AUTHORITYSYSTEM privilegios

$TaskName = "NewPsTask"
$TaskDescription = "Running PowerShell script from Task Scheduler"
$TaskCommand = "c:windowssystem32WindowsPowerShellv1.0powershell.exe"
$TaskScript = "C:PSStartupScript.ps1"
$TaskArg = "-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $TaskScript"
$TaskStartTime = [datetime]::Now.AddMinutes(1)
$service = new-object -ComObject("Schedule.Service")
$service.Connect()
$rootFolder = $service.GetFolder("")
$TaskDefinition = $service.NewTask(0)
$TaskDefinition.RegistrationInfo.Description = "$TaskDescription"
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$triggers = $TaskDefinition.Triggers
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)

¿Cómo ver y ejecutar tareas programadas con PowerShell?

Puede enumerar todas las tareas programadas activas en Windows con el comando:

Get-ScheduledTask -TaskPath | ? state -ne Disabled

Para obtener información sobre una tarea específica:

Get-ScheduledTask CheckServiceState| Get-ScheduledTaskInfo

LastRunTime : 4/7/2021 10:00:00 AM
LastTaskResult : 267011
NextRunTime : 4/8/2021 10:00:00 AM
NumberOfMissedRuns : 0
TaskName : CheckServiceState
TaskPath : 
PSComputerName :

Get-ScheduledTaskInfo powershell

Puede deshabilitar esta tarea:

Get-ScheduledTask CheckServiceState | Disable-ScheduledTask

Para habilitar una tarea:

Get-ScheduledTask CheckServiceState | Enable-ScheduledTask

Para ejecutar la tarea de inmediato (sin esperar la programación), ejecute:

Start-ScheduledTask CheckServiceState

deshabilitar/habilitar/iniciar la tarea programada manualmente

Para eliminar completamente una tarea de la biblioteca del Programador de tareas:

Unregister-ScheduledTask -TaskName CheckServiceState

Si necesita cambiar el nombre de usuario desde el que se inicia la tarea y, por ejemplo, el modo de compatibilidad, utilice el Establecer tarea programada cmdlet:

$task_user = New-ScheduledTaskPrincipal -UserId woshubj.abrams' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings

Si recibe el error “Set-ScheduledTask: No mapping between account names and security IDs was done” compruebe que proporciona el nombre de usuario correcto.

Set-ScheduledTask: no se realizó ninguna asignación entre los nombres de cuenta y los ID de seguridad

¿Cómo exportar e importar tareas programadas a través de archivos XML?

PowerShell le permite exportar la configuración actual de cualquier tarea programada a un archivo XML de texto. De modo que puede exportar los parámetros de cualquier tarea e implementar una tarea en otras computadoras. La tarea se puede exportar tanto desde la GUI del Programador de tareas como desde la consola de PowerShell.

Aquí está el comando para exportar la tarea con el nombre StartupScript al archivo StartupScript.xml:

Export-ScheduledTask StartupScript | out-file c:tmpStartupScript.xml

Export-ScheduledTask - tarea xml

El cmdlet Export-ScheduledTask no está disponible en PowerShell 2.0, por lo que en Windows 7/Windows Server 2008 R2 es mejor usar la herramienta integrada. tareas para exportar la configuración de la tarea y redirigir el resultado a un archivo de texto:

schtasks /query /tn "NewPsTask" /xml >> "c:tmpNewPsTask.xml"

Una vez que la configuración de la tarea programada se exporta al archivo XML, se puede importar a cualquier computadora de la red mediante la GUI, SchTasks.exe o PowerShell.

Tarea programada de registro cmdlet puede ayudarlo a importar configuraciones de tareas desde un archivo XML y registrarlo:
Register-ScheduledTask -Xml (Get-Content “\mun-fs01publicNewPsTask.xml” | out-string) -TaskName "NewPsTask"

En PowerShell 2.0 (Windows 7/Server 2008 R2), es más fácil importar una tarea con la herramienta schtasks. El primer comando crea una nueva tarea. El segundo lo ejecutará inmediatamente (sin esperar a que el gatillo lo active).

schtasks /create /tn "NewPsTask" /xml "\Srv1publicNewPsTask.xml" /ru corpskrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"

Tenga en cuenta que este ejemplo usa las credenciales de la cuenta que se usa para ejecutar la tarea. Si no se especifican las credenciales, porque no están almacenadas en el trabajo, se solicitarán al importar.

Artículos Interesantes