具有每日触发和重复间隔的计划任务

mal*_*der 19 powershell powershell-3.0

我似乎无法弄清楚如何创建每天触发的新计划任务,并每30分钟重复一次.我一直在圈子里.

下面的所有内容都适用于设置我想要的任务,但只触发一次.

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

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


####### Create New Scheduled Task
$action = New-ScheduledTaskAction -Execute "Powershell" -Argument "-WindowStyle Hidden `"$psscript `'$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
Run Code Online (Sandbox Code Playgroud)

如果我改变-Once,-Daily我会失去-RepetitionInterval旗帜.如果我在注册后再回来将任务更新到每天,它会擦除​​重复的触发器.

这不是一种不常见的调度方法,可以通过任务调度程序UI轻松应用.我觉得它可能很简单,但我想念它.

任何帮助表示赞赏.

编辑:解决重复的问题.帖子" Powershell v3 New-JobTrigger每日重复 "中提出的问题也是如此.但正如我之前评论的那样,没有一个答案可以解决这个问题.标记的答案正是我已经拥有的,它设置了一个-Once触发器的任务,然后将其更新为每5分钟重复一天.在第一天之后,该任务将永远不会再次触发.它没有解决每天触发任务的问题,重复和持续时间直到下一次触发.

该帖子的其他三个答案也没有解决这个问题.我不知道为什么它被标记为已回答,因为它不正确.在我发布这个问题之前,我已经完全探讨了这些回复.由于该帖子已经老化并被标记为已回答,我创建了这个问题.

注意:我找到了一种解决方法,但不是很好.目前看来,使用powershell定义自定义触发器的最简单方法是操作Scheduled Task XML并使用直接导入它Register-ScheduledTask

Sha*_*ine 19

虽然用于计划任务触发器的PowerShell界面是有限的,但如果设置为RepetitionDurationto [System.TimeSpan]::MaxValue,则会导致持续时间为"无限期".

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

在Windows Server 2012 R2上测试(PowerShell 4.0)

  • 在Windows 10中产生此错误:`任务XML包含格式不正确或超出范围的值 (11认同)
  • 省略RepetitionDuration将持续时间设置为无限(至少在Windows 10上) (11认同)
  • 希望适用于所有操作系统版本的折衷方案是将 *Eternity* 替换为更亵渎的东西,例如 *20 years*: `-RepetitionDuration (New-TimeSpan -Days (365 * 20))` (2认同)

Jam*_*ter 12

下面是一个创建PowerShell中,将在中午12点开始(我的机器,情况因人而异上V5)计划任务的方式,每天每小时重复一天的休息.因此它会无限期地运行.我相信这是一个优秀的方法vs设置-RepetitionDuration,([timespan]::MaxValue)因为我之前评论过,因为触发器将在任务计划程序中显示为:

每天凌晨12:00 - 触发后,每30分钟重复一次,持续1天.

而不是将任务注册的日期作为使用-Once -At 12am结果的方法出现在触发器中,而不是创建触发器-Daily -At 12am,注册任务然后访问任务Triggers属性的其他一些属性;

$action = New-ScheduledTaskAction -Execute <YOUR ACTION HERE>
$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.
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过你建议的这种方法,它不会产生预期的结果.当我在GUI中验证触发器时,它显示每日触发器,该触发器在午夜执行并且不重复.这是在Windows Server 2012 R2 Standard上测试的. (2认同)
  • 我刚刚尝试过,这个概念对我来说效果很好,我能够设置“$task.Triggers.Repetition.Duration”、“$task.Triggers.Repetition.Interval”和“$task.Triggers[0]”。 ExecutionTimeLimit` 为我想要的值,然后运行 ​​`$task | Set-ScheduledTask` 并查看 GUI 中正确设置的每个 x 的重复任务。Win 8.1 上的 PS V5 (2认同)

mal*_*der 10

我确信必须有更好的方法,但这是我目前的解决方法.

我用我想要的触发器创建了一个任务,然后抓住它生成的XML.

下面我创建任务,然后为新任务拉动XML,替换我的触发器,然后取消注册任务并使用更新的XML重新注册它.

从长远来看,我可能只是使用完整的XML文件来完成任务,并根据需要替换字符串,但现在这样做.

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

#Location of Scripts:
$psscript = "C:\test\test.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]'<CalendarTrigger xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"><Repetition><Interval>PT30M</Interval><Duration>P1D</Duration><StopAtDurationEnd>false</StopAtDurationEnd></Repetition><StartBoundary>2013-11-18T07:07:15</StartBoundary><Enabled>true</Enabled><ScheduleByDay><DaysInterval>1</DaysInterval></ScheduleByDay></CalendarTrigger>'
$EncryptSyncST.Task.Triggers.InnerXml = $UpdatedXML.InnerXML

Unregister-ScheduledTask "EncryptSyncTEST" -Confirm:$false
Register-ScheduledTask "EncryptSyncTEST" -Xml $EncryptSyncST.OuterXml -User $username -Password $password
Run Code Online (Sandbox Code Playgroud)

  • 看起来你的解决方法是要走的路,至少从我能说的方面来看.文档[这里](http://technet.microsoft.com/en-us/library/jj649821.aspx)使用-Daily选项列出-RepetitionInterval参数不兼容(不同的参数集)...它只能工作对于-Once ...要么我错过了什么,要么有人在cmdlet中定义参数集时睡着了...... :( (3认同)
  • 您也可以将-RepetitionDuration`设置为`([timespan] :: MaxValue)`; 这将在“任务计划程序”中显示为“触发后,无限期地重复每个X”。 (2认同)

小智 8

创建基本触发器:

$t1 = New-ScheduledTaskTrigger -Daily -At 01:00
Run Code Online (Sandbox Code Playgroud)

创建二级触发器:

$t2 = New-ScheduledTaskTrigger -Once -RepetitionInterval (New-TimeSpan -Minutes 15) -RepetitionDuration (New-TimeSpan -Hours 23 -Minutes 55)
Run Code Online (Sandbox Code Playgroud)

从次要对象中取出重复对象,并将其插入基本触发器中:

$t1.Repetition = $t2.Repetition
Run Code Online (Sandbox Code Playgroud)

鲍勃是你的叔叔:

New-ScheduledTask -Trigger $t1 -Action ...
Run Code Online (Sandbox Code Playgroud)


小智 6

/sf/answers/3827238831/ @SteinIP 解决方案对我有用,稍作修改

在“创建辅助触发器”部分中添加了“-At”参数,其值与“创建基本触发器”部分中的值相同。

创建基础触发器

$t1 = New-ScheduledTaskTrigger -Daily -At 01:00
Run Code Online (Sandbox Code Playgroud)

创建辅助触发器:

$t2 = New-ScheduledTaskTrigger -Once -RepetitionInterval (New-TimeSpan -Minutes 15) -RepetitionDuration (New-TimeSpan -Hours 23 -Minutes 55) -At 01:00
Run Code Online (Sandbox Code Playgroud)

施展魔法:

$t1.Repetition = $t2.Repetition

New-ScheduledTask -Trigger $t1 -Action ...
Run Code Online (Sandbox Code Playgroud)


小智 5

我发现完成此操作的最简单方法是使用schtasks.exe。请参阅完整的文档,网址https://msdn.microsoft.com/zh-cn/library/windows/desktop/bb736357%28v=vs.85%29.aspx

schtasks.exe /CREATE /SC DAILY /MO 1 /TN 'task name' /TR 'powershell.exe C:\test.ps1' /ST 07:00 /RI 30 /DU 24:00
Run Code Online (Sandbox Code Playgroud)

这将创建一个每天运行的任务,每30分钟重复一次,持续1天。