如何找到计划任务文件夹的位置

Posted

技术标签:

【中文标题】如何找到计划任务文件夹的位置【英文标题】:How to find the location of the Scheduled Tasks folder 【发布时间】:2011-02-24 05:21:09 【问题描述】:

我在网上看到一些参考资料指出 Windows 中的“计划任务”存储在 %SystemRoot%\Tasks 中,我认为这通常等同于 C:\Windows\Tasks

但是,我发现虽然该文件夹存在于我的 Windows 7 系统上,但计划任务不会使用它。

我的系统似乎在使用 C:\Windows\System32\Tasks

我研究了环境变量,那里似乎没有与Scheduled Tasks 相关的任何内容。

我如何发现哪个文件夹用于计划任务?

【问题讨论】:

在 python 中你也许可以使用 ctypes 模块 (example)。但是我找不到专门针对已调度任务的参考。 您通常不会对文件夹本身进行操作,因为它是 Windows 私有的。自动化控制任务的方式是通过api。 @DavidHeffernan:完全同意,但有些时候你需要这样做。今天我搞砸了我的一项任务的 SDDL。在我找到 \System32\Tasks 下的任务之前,无法使用 api 解决此问题。很有帮助的问题。 +1 【参考方案1】:

我想扩展@Jan 答案:

似乎Task Scheduler 1.0 API 使用C:\Windows\Tasks 文件夹来创建和枚举任务(this example),而Task Scheduler 2.0 API 使用C:\Windows\System32\Tasks 来创建和枚举任务(this example)。

看来,Windows 控制台实用程序 schtasks 和 GUI 实用程序 taskschd.msc 使用 Task Scheduler 2.0 API

附: 我发现,如果放置在C:\Windows\Tasks 中的任务没有设置AccountInformation,那么任务不会在Windows 控制台和GUI 调度程序中显示。如果您设置 AccountInformation(甚至是“”为SYSTEM帐户)和设置标志TASK_FLAG_RUN_ONLY_IF_LOGGED_ON - 任务将在所有标准应用程序中显示 .

Solution found here

【讨论】:

【参考方案2】:

任务保存在文件系统和注册表中

任务存储在 3 个位置:1 个文件系统位置和 2 个注册表位置。

文件系统:

C:\Windows\System32\Tasks

注册表:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Taskcache\Tasks
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Taskcache\Tree

因此,您需要删除这 3 个位置的损坏任务。

【讨论】:

注册表Taskcache对我很有帮助,谢谢!我备份了旧 Windows 安装的整个注册表,而任务本身已经消失(使用 Windows)。 非常感谢,这解决了我的问题。令人惊讶的是,许多谷歌链接确实显示了不工作的解决方案,没有提到文件系统中的隐藏文件夹 %SystemRoot%\Tasks (C:\Windows\Tasks) 中还有一些任务,在某些情况下不会显示在任务计划程序管理单元中。【参考方案3】:

在较新版本的 Windows(Windows 10 和 Windows Server 2016)上,您创建的任务位于 C:\Windows\Tasks。他们将有扩展名.job

例如,如果您创建任务“DoWork”,它将在

C:\Windows\Tasks\DoWork.job

【讨论】:

在我的 Windows Server 2016 实例中,任务位于 `C:\Windows\System32\Tasks` 中,它们是没有扩展名的 XML 文件。【参考方案4】:

看起来 TaskCache 注册表数据在 ...

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache

...在我的 Windows 10 PC 上(即在 TaskCache 之前添加 Schedule 并且 TaskCache 有一个大写 C )。

【讨论】:

【参考方案5】:

MMC 存在多个问题,但在我的业务中几乎每台 PC 上,询问调度程序 API 都不会打开并且不知何故已损坏。因此,您不能编辑、删除或以其他方式修改在 API 决定不再运行之前开发的任务。我们发现解决该问题的唯一方法是完全清除 C:\Users\ 区域下的人员配置文件,并在人员重新登录后强制系统重新创建登录。这似乎解决了 API 问题和它再次工作,但是该用户通常不再看到这些任务,因为开发的任务是特定于用户的,而不是 Windows 7 中的机器。另一个奇怪的事情是,有时,虽然没有任何可以分析的频率,即使 API 已损坏且无法打开,任务仍会运行。这个问题的原因显然是未知的,但在各种网站上描述了许多“修复”,但用户配置文件删除和重新添加似乎每次都有效,至少有一段时间。这些任务现在在 WIN 7 中保存为 XML,因此如果您在 system32/tasks 文件夹中找到它们,您可以删除它们,或将它们复制到新驱动器,然后将它们重新导入任务计划程序。我们使用了来自 Splinterware 的系统调度程序软件,因为我们多次遇到相同的损坏问题,即使修复似乎不是永久性的。

【讨论】:

【参考方案6】:

对于 Windows 7 及更高版本,计划任务不是由 cmd.exe 运行,而是由 MMC(Microsoft 管理控制台)运行。 %SystemRoot%\Tasks 应该适用于任何其他 Windows 版本。

【讨论】:

以上是关于如何找到计划任务文件夹的位置的主要内容,如果未能解决你的问题,请参考以下文章

DataWhale学习计划(第六期):python基础任务6

sql server 如何执行一项计划任务

修改计划任务无密码

从任务计划程序运行时如何重定向 PowerShell 输出?

如何在计划任务中运行 PHP 文件(Windows 任务计划程序)

如何使用 cmd 和日志文件在任务计划程序中调试此计划的 .bat 任务?