我正在尝试使用以下触发器创建计划任务:
- 启动
- 每5分钟运行一次
- 无限期运行
在GUI中,我可以通过选择以下内容轻松完成:
- 开始任务:启动时
并在“高级”选项卡中:
- 每隔5分钟重复一次任务
- 持续时间:无限期
但是我在使用Powershell时遇到了麻烦。
我烦恼的代码:
$repeat = (New-TimeSpan -Minutes 5)
$duration = ([timeSpan]::maxvalue)
$trigger = New-ScheduledTaskTrigger -AtStartup -RepetitionInterval $repeat -RepetitionDuration $duration
不会使用RepetitionInterval和RepetitionDuration参数。但我需要这个功能。 我怎么能实现我的目标呢?
答案 0 :(得分:2)
New-ScheduledTaskTrigger
使用参数集。当您指定希望计划任务启动时#34;登录"您将自己限制为以下参数集:
Parameter Set: AtStartup
New-ScheduledTaskTrigger [-AtStartup] [-RandomDelay <TimeSpan> ] [ <CommonParameters>]
如果您在启动时使用&#34;可能更有益的是#34;计划任务,使用&#34;一次&#34;每隔五分钟注册一个新的计划任务。参数集:
Parameter Set: Once
New-ScheduledTaskTrigger [-Once] -At <DateTime> [-RandomDelay <TimeSpan> ] [-RepetitionDuration <TimeSpan> ] [-RepetitionInterval <TimeSpan> ] [ <CommonParameters>]
使用正确的参数集后,应成功分配您的预定任务触发器。
答案 1 :(得分:1)
要使用“启动”触发器和重复命令从字面上设置任务,似乎您必须进入COM(或者显然使用TaskScheduler UI。)。
# Create the task as normal
$action = New-ScheduledTaskAction -Execute "myApp.exe"
Register-ScheduledTask -Action $action -TaskName "My Task" -Description "Data import Task" -User $username -Password $password
# Now add a special trigger to it with COM API.
# Get the service and task
$ts = New-Object -ComObject Schedule.Service
$ts.Connect()
$task = $ts.GetFolder("\").GetTask("My Task").Definition
# Create the trigger
$TRIGGER_TYPE_STARTUP=8
$startTrigger=$task.Triggers.Create($TRIGGER_TYPE_STARTUP)
$startTrigger.Enabled=$true
$startTrigger.Repetition.Interval="PT10M" # ten minutes
$startTrigger.Repetition.StopAtDurationEnd=$false # on to infinity
$startTrigger.Id="StartupTrigger"
# Re-save the task in place.
$TASK_CREATE_OR_UPDATE=6
$TASK_LOGIN_PASSWORD=1
$ts.GetFolder("\").RegisterTaskDefinition("My Task", $task, $TASK_CREATE_OR_UPDATE, $username, $password, $TASK_LOGIN_PASSWORD)
答案 2 :(得分:0)
在这里查看我的答案:https://stackoverflow.com/a/61646465/2943191
当然,一旦编写了工作示例,它实际上相对简单。
使用-AtLogOn
代替-AtStartup
。