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]::MaxValue
resulta 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 12am
registre 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]'PT30M P1D false 2013-11-18T07:07:15 true 1 '
$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.