我是 Windows Server 的新手,所以我不确定我是否做错了什么,或者服务器是否有问题。
我有 Linux 背景,我想制作类似于 cronjob 的东西。在 Windows Server 中,这似乎是由任务计划程序执行的。我创建了一个简单的 .ps1 脚本,在 XX:YY 时间执行,并在我登录时执行。
Get-Date | Out-File C:\tmp\debug\debug.txt -Append
测试后,历史记录显示“警告 ..... 325 ... 已排队 ... XXXXXX”。我已在 Google 上搜索解决方案,但 Google 只告诉我让它并行运行,以防进程的现有实例已在运行。我已尝试了所有方法,但它仍将脚本放入队列中。该队列似乎未被处理。
我将不胜感激任何帮助。
答案1
听起来您可能已经有几个任务实例排队,没有配置超时,并且脚本中没有终止来处理潜在的错误。
我建议从任务计划程序中的空白开始,结束任务的所有现有实例。右键单击它并选择“结束”。如果排队的实例很多,您可能需要多次执行此操作。
您可以在计划任务的属性中调整一些内容以帮助其保持运行。
打开任务属性对话框并转到“设置”选项卡:
- 正如您所发现的,您可以设置任务的新实例以并行运行。这可能是您想要的,也可能不是您想要的。您的选项有:“不启动新实例”、“并行运行新实例”、“排队新实例”或“停止现有实例”。
- 根据您预计此任务的操作通常需要多长时间,您可能需要将设置更改为“如果任务运行时间超过 [x] [时间单位],则停止任务”。此设置也可以在每个触发器的设置中更改(请参阅任务属性的“触发器”选项卡。)
在任务属性对话框中,转到条件选项卡:
- 除非绝对必要,请禁用此选项卡上的所有条件。
在任务属性对话框中,滚动浏览“历史记录”选项卡,查看除了“排队”状态之外是否记录了其他状态。它们可能会提供一些有关正在发生的事情的见解。
尽管如此,这只会帮助你运行更多的任务实例,但并不能解决为什么任务不会自动完成。它可以非常在这些情况下,将分步日志记录添加到 PowerShell 脚本中很有帮助,这样您就可以深入了解该脚本在挂起之前进展如何。我怀疑您会发现脚本没有完成,这导致计划的任务永远不会完成,并且任务的下一个实例永远不会启动。日志记录可以揭示这种情况发生的位置,因为有时手动运行脚本并不是对任务计划程序运行脚本时发生的情况的完美测试。
正如您更新的问题所指出的,您只是发送了一个简单的命令,因此从长远来看,记录可能没有什么帮助,但仍然可以揭示实际的错误是什么。 (尝试使用内置的 $error 变量进行实验。)如果您以与测试帐户不同的帐户运行脚本,则可能是权限错误。
最后,尝试在脚本末尾添加“Exit 0”行,看看是否有助于任务计划程序知道脚本已成功结束。
答案2
我认为这样的脚本不会被排队(它很短,运行起来只需要几毫秒)。这里更有可能有其他原因。尝试手动运行它,可能是你的脚本不允许运行,未经签名:https:/go.microsoft.com/fwlink/?LinkID=135170
还要注意哪个帐户有执行权限,特别是如果您允许,则对于计划,它应该是您允许的帐户。