使用 PowerShell 创建一个无需用户登录即可每分钟运行一次的计划任务。

5

我正在尝试使用PowerShell创建(和替换)计划任务。我找到了相关PowerShell命令的文档,就我所知,我已经做得没错:

$action = New-ScheduledTaskAction -Execute "node" -Argument "C:/scripts/task.js"
$now = Get-Date
$interval = New-TimeSpan -Seconds 60
$forever = [System.TimeSpan]::MaxValue
$trigger = New-ScheduledTaskTrigger -Once -At $now -RepetitionInterval $interval -RepetitionDuration $forever
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask -TaskName 'TEST' -InputObject $task

然而,运行此命令时,出现了一个神秘的错误:

Register-ScheduledTask : 任务 XML 包含格式不正确或超出范围的值。

这个错误信息没什么用,我该如何调试它呢?

  • 哪个 XML?在哪个路径下?
  • 哪个值?
  • 哪个范围?

这个答案说现在不要使用 TimeSpan.MaxValue,所以我改为使用100年:

$forever = $now.AddYears(100) - $now # [System.TimeSpan]::MaxValue doesn't work

然而,错误仍然存在。
我在谷歌上搜索并发现一个建议是查看“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree”,但是我的任务没有出现在其中。
该怎么办?
1个回答

8

不要设置-RepetitionDuration参数。默认情况下,它将无限制地执行。

$action = New-ScheduledTaskAction -Execute "node" -Argument "C:/scripts/task.js"
$now = Get-Date
$interval = New-TimeSpan -Seconds 60
$forever = [System.TimeSpan]::MaxValue
$trigger = New-ScheduledTaskTrigger -Once -At $now -RepetitionInterval $interval 
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask -TaskName 'TEST' -InputObject $task

使用上述脚本创建任务

任务计划触发器

至于你的错误,当我尝试执行你的脚本时,完整的错误提示非常明显。它特别指出"Max"时间跨度不是一个被接受的值。

Register-ScheduledTask: 任务 XML 包含一个格式不正确或超出范围的值。 (8,42):Duration:P99999999DT23H59M59S 在第8行第1个字符处: + Register-ScheduledTask -TaskName 'TEST' -InputObject $task + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Register-ScheduledTask], CimException + FullyQualifiedErrorId : HRESULT 0x80041318,Register-ScheduledTask


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接