我有一个正在运行的计划任务,00:00
它会打开一个.bat
包含命令的文件robocopy
,并将任务设置为在 4 分钟后停止,并且如果在请求时未结束则强制停止。
似乎任务计划程序停止命令会被忽略,直到robocopy
命令完成为止,在我看来这违背了要点 - 有没有办法解决这个问题?
- 我期望的消息在 的历史记录中
00:04
,但是 的输出文件robocopy
继续运行了 4 分钟,只在 处停止00:08
:任务计划程序因超出任务定义中配置的分配执行时间而终止了任务
{uuid}
实例。用户操作:增加配置的任务超时或调查延迟的外部原因。Taskname
- 文件中还有其他命令
.bat
,但该robocopy
步骤是在调度程序尝试停止任务时运行的命令,其后的命令未运行:MkDir "C:\Destination\Folder" RoboCopy "C:\Source\Folder" "C:\Destination\Folder" /MOV /IS /S /R:0 /LOG:"C:\output.txt" RmDir "C:\Destination\Folder" /s /q
答案1
@JW0914 说得对:
我认为这是正常行为,因为任务和脚本是两个独立的实体 - 虽然任务启动脚本,但脚本不是任务,因此它应该独立于任务本身运行完成(至少这是我
RoboCopy
在任务计划程序中启动脚本的经验). 需要参考任务计划程序的 Microsoft Docs(如果我没记错的话,任务本身会从事件查看器中的事件中完成脚本或出现错误,尽管我可能记错了)
这里我们可以解决这个问题,因为这是一个robocopy
没有批处理语法的普通命令,通过使用创建基本任务无需创建批处理文件:
- 打开任务计划程序 → 创建 → 创建基本任务
- 命名任务并设置描述
- 设置触发器
- 选择时间
- 操作→运行程序:
- 程序/脚本:
C:\Windows\System32\robocopy.exe
- 参数:
"C:\Source\Folder" "C:\Destination\Folder" /MOV /IS /S /R:0 /log:"C:\output.txt"
- 程序/脚本:
- 结束
答案2
需要一些帮助来编写一个简单的脚本。
需要触发一个进程,当 CPU 低于 12% 并运行 5 分钟时终止该进程。有什么想法吗
$处理器 = (获取进程).CPU
$processes_to_kill = 获取进程 Omnis* |
Where-Object {$_.$process.cpu -le 12 -and {($_.process.starttime).TotalSeconds -gt 300} }
如果 ($processes_to_kill -ne $null)
{
$processes_to_kill | ForEach-Object { $_.Kill() }
}