【问题标题】:Why is my Scheduled Task updating its 'Last Run Time' correctly, and giving a 'Last Run Result' of '(0x0)', but still not actually working?为什么我的计划任务正确更新其“上次运行时间”,并给出“(0x0)”的“上次运行结果”,但仍然无法正常工作?
【发布时间】:2015-12-11 21:44:11
【问题描述】:

我有一个批处理文件,它设置为在 Windows Server 2012 上作为计划任务运行。

当我从命令行手动运行批处理文件时,它可以工作。当我在任务计划程序中右键单击我的任务并手动运行它时,它仍然可以正常工作。

但是,如果我让任务按照为它设置的计划运行......那么它有时似乎可以工作,但其他时候却不行。

我已经将任务设置为以给定用户身份运行;我已正确设置其“开始于”目录;我试过给它最高权限。这些都没有帮助。

【问题讨论】:

    标签: batch-file path scheduled-tasks windows2012


    【解决方案1】:

    基本答案是任务的批处理文件正在运行,任务的最后一步返回0x0。如果任务显然“没有做任何事情”,那是因为任务的某个较早步骤正在静默失败

    为什么?在我的情况下,我认为这很容易影响其他人,答案是计划任务的批处理文件会看到不同的环境变量,具体取决于它运行的用户是否当前登录

    更多详情:

    特别是,如果任务设置为以管理员身份运行,则当管理员登录时,任务会看到一组变量(无论是手动运行还是按计划运行),但当管理员未登录时,它看到一组不同的变量。

    这可能很难调试 - 基本上,您需要进行大量日志记录!

    当您在 Windows Server 2012 上将批处理文件作为计划任务运行时,它只会看到共享的环境变量。 它不会看到您设置为运行的用户的用户特定环境变量,除非相关用户当前已登录

    您可以通过将SET > test.txt 单独放入批处理文件并在不同情况下将其作为任务运行(手动;登录时按计划;未登录时按计划)来查看问题的实际效果.

    更新:

    从更详细的测试来看,当任务设置为运行的用户未登录时,变量USERDNSDOMAIN, 无论如何,USERDOMAINUSERNAME 确实为该用户正确设置。变量 USERPROFILE 被错误地设置为 Windows 默认用户的值(即 C:\Users\Default)。其他所有内容都被错误地设置为共享环境变量集(请注意,这显然不是指定用户的正确设置,甚至也不是 Windows 默认用户的正确设置,它应该获取其用户特定的环境变量来自HKEY_USERS\.Default\Environment)。

    注意:

    这与windows 7 task scheduler doesn't use updated path 不是同一个问题,实际上对任何共享环境变量的更改,包括PATH,都可以立即看到(在我所做的测试中,在 Windows 2012 R2 上),无需重新启动任何进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 2013-05-12
      • 2013-12-11
      • 2013-06-15
      • 2015-05-19
      相关资源
      最近更新 更多