batch-file - 为什么我的计划任务正确更新了它的 'Last Run Time',并给出了 'Last Run Result' 的 '(0x0)',但仍然没有真正工作?

标签 batch-file path scheduled-tasks windows2012

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

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

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

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

最佳答案

基本答案是任务的批处理文件正在 运行,任务的最后一步返回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 上),无需重新启动任何进程。

关于batch-file - 为什么我的计划任务正确更新了它的 'Last Run Time',并给出了 'Last Run Result' 的 '(0x0)',但仍然没有真正工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589381/

相关文章:

windows - 在 Windows 7 中使用批处理脚本检查实体的主机文件?

Windows 在文件的特定行号上添加新行

java - Bat 文件设置类路径

javascript - 文本未转换为正确的 svg 代码 - Opentype Javascript

c# - 远程定时任务状态

不同大小的 Python Pandas 细胞

windows - Windows 服务器重启后运行批处理脚本

batch-file - Windows 环境变量值中的引号

java - 如何使用 JFileChooser 将最后一个路径设置为下一个默认路径

sql - 动态索引创建 - SQL Server