在Windows任务计划程序中停止重复触发,直到第二天

时间:2013-12-09 22:39:01

标签: windows-server-2008 scheduled-tasks

我们已安排Windows任务启动一些自定义代码(作为可执行文件),每15分钟检查一次文件是否存在。

如果最终找到该文件,我们的服务会对其进行一些处理。这就是问题:在处理文件之后,业务要求任务计划程序停止这些15分钟的检查,直到第二天。

有没有办法在Windows任务计划程序中插入逻辑,以便在满足某些条件后停止运行其触发器?或者有更好的方法来构建这个过程吗?

我们正在使用Windows Server 2008 R2 Standard SP1来运行它。

1 个答案:

答案 0 :(得分:2)

如何结束预定任务:

A. 要从命令行终止当前正在运行的任务(即显示在任务计划程序中的任务 - >“显示所有正在运行的任务”):
schtasks.exe /End /TN "My task name"

B。要阻止计划任务在将来被触发运行:
schtasks.exe /Change /TN "My task name" /DISABLE

C。要重新启用该任务:
schtasks.exe /Change /TN "My task name" /ENABLE

输入以下内容可获得更多详情:schtasks.exe /Change /?

D。要求进程终止(此处:记事本,但使用任务管理器中显示的名称 - >进程\图像名称),当您运行 A时,该进程不会终止。
taskkill.exe /IM Notepad.exe

E。要强行终止在上面运行 D。时未终止的流程:
taskkill.exe /F /IM Notepad.exe /T

注意:使用taskkill不是结束进程的干净方法。您可以阅读更多in this postin the article it links to


如何在任务计划程序中根据您描述的情况进行设置:

不要让你的任务直接运行自定义.exe,而是将其更改为运行脚本(例如批处理文件,PowerShell脚本,Python脚本等),而不是:

  • 触发自定义exe,然后
  • 测试文件是否已找到并“处理”,然后
  • 调用上面的命令 B。以阻止它再次运行。

添加每天早上运行的第二个任务(选中“运行是否登录用户”)通过调用上面的命令 C。重新启用计划任务。

注意:要调用schtasks.exe,需要提升权限,因此请将执行该命令的任务设置为“以最高权限运行”。


如何检测文件已被处理:

  • 让您的自定义.exe在成功运行时添加注册表项。您的脚本可以使用以下方式查找该条目: reg.exe(类型REG QUERY /?了解详情)。

还有其他方法(例如发布Windows事件,发送消息等),但使用注册表是一种简单的脚本供使用的机制。

请勿直接从您的.exe中禁用该任务。保持应用程序及其调用分开。如果您想稍后以不同方式禁用该任务,那么这也将使您不必重新编译。