繁体   English   中英

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

[英]Create a scheduled task which runs every minute without the user being logged in using PowerShell

我正在尝试使用 PowerShell 创建(和替换)计划的 Windows 任务。 我找到了相关 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搜索并找到了一个建议来查看HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Schedule\\TaskCache\\Tree ,但是,我的任务没有出现在那里。

该怎么办?

只是不要设置-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

使用上述脚本创建的任务任务调度器触发器

至于你的错误,我在尝试执行你的脚本时遇到的完整错误已经足够清楚了。 它特别指出“最大”时间跨度不是可接受的值。

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

Sage 的答案是实现所需结果的最简单方法,并且可能会处理绝大多数情况。 但是,如果您在某些情况下需要明确说明无限持续时间(或者您的编码风格只是喜欢它),正确的答案是使用InfiniteTimeSpan 对象

$action = New-ScheduledTaskAction -Execute "node" -Argument "C:/scripts/task.js"
$now = Get-Date
$interval = New-TimeSpan -Seconds 60
$forever = [Threading.Timeout]::InfiniteTimeSpan
$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM