Saltar al contenido

Tarea programada con activación diaria e intervalo de repetición

No dudes en compartir nuestra web y códigos con otro, necesitamos de tu ayuda para hacer crecer nuestra comunidad.

Solución:

Si bien la interfaz de PowerShell para desencadenadores de tareas programadas es limitada, resulta que si configura el RepetitionDuration para [System.TimeSpan]::MaxValueresulta en una duración de “Indefinidamente”.

$trigger = New-ScheduledTaskTrigger `
    -Once `
    -At (Get-Date) `
    -RepetitionInterval (New-TimeSpan -Minutes 5) `
    -RepetitionDuration ([System.TimeSpan]::MaxValue)

Probado en Windows Server 2012 R2 (PowerShell 4.0)

Esta es una forma de crear una tarea programada en Powershell (v5 en mi máquina, YMMV) que comenzará a las 12 a.m. diarioy repetir cada hora Para el El resto del día. Por lo tanto, se ejecutará indefinidamente. Creo que este es un enfoque superior frente a la configuración. -RepetitionDuration para ([timespan]::MaxValue) como comenté anteriormente, el activador aparecerá en el Programador de tareas como:

A las 12:00 a. m. todos los días: después de activarse, repita cada 30 minutos durante 1 día.

En lugar de que la fecha en la que se registró la tarea aparezca en el activador como enfoques que utilizan -Once -At 12am dar como resultado, crear el disparador como un simple -Daily -At 12amregistre la tarea y luego acceda a algunas propiedades adicionales en la propiedad Disparadores de tareas;

$action = New-ScheduledTaskAction -Execute 
$trigger = New-ScheduledTaskTrigger -Daily -At 12am
$task = Register-ScheduledTask -TaskName "MyTask" -Trigger $trigger -Action $action
$task.Triggers.Repetition.Duration = "P1D" //Repeat for a duration of one day
$task.Triggers.Repetition.Interval = "PT30M" //Repeat every 30 minutes, use PT1H for every hour
$task | Set-ScheduledTask
//At this point the Task Scheduler will have the desirable description of the trigger.

Estoy seguro de que debe haber una mejor manera, pero esta es mi solución actual.

Creé una tarea con los disparadores que quería y luego agarré el XML que generó.

A continuación, estoy creando la tarea, luego extraigo el XML para esa nueva tarea, reemplazo mis disparadores, luego cancelo el registro de la tarea y la vuelvo a registrar con el XML actualizado.

A largo plazo, probablemente usaré el archivo XML completo para la tarea y reemplazaré las cadenas según sea necesario, pero esto funciona por ahora.

#Credentials to run task as
$username = "$env:USERDOMAIN$env:USERNAME" #current user
$password = "notmypass"

#Location of Scripts:
$psscript = "C:testtest.ps1"
$Sourcedir ="C:testsource"
$destdir = "C:testdest"
$archivepassword = "notmypass"

####### Create New Scheduled Task
$action = New-ScheduledTaskAction -Execute "Powershell" -Argument "-WindowStyle Hidden '$EncryptSync' '$sourcedir' '$destdir' '$archivepassword'"
$trigger = New-ScheduledTaskTrigger -Once -At 7am -RepetitionDuration  (New-TimeSpan -Days 1)  -RepetitionInterval  (New-TimeSpan -Minutes 30)
$settings = New-ScheduledTaskSettingsSet -Hidden -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable
$ST = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask "EncryptSyncTEST" -InputObject $ST -User $username -Password $password


[xml]$EncryptSyncST = Export-ScheduledTask "EncryptSyncTEST"
$UpdatedXML = [xml]'PT30MP1Dfalse2013-11-18T07:07:15true1'
$EncryptSyncST.Task.Triggers.InnerXml = $UpdatedXML.InnerXML

Unregister-ScheduledTask "EncryptSyncTEST" -Confirm:$false
Register-ScheduledTask "EncryptSyncTEST" -Xml $EncryptSyncST.OuterXml -User $username -Password $password

Si entiendes que ha sido de ayuda nuestro artículo, nos gustaría que lo compartas con el resto seniors de este modo nos ayudas a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *