任务计划程序无法在设置为无论用户是否登录时运行时打开批处理文件

32

操作系统:Windows Server 2008 R2 Enterprise

我无法在注销时让任务计划程序运行 .bat 文件。我有一个要使用的生产 .bat 文件,但为了进行故障排除,我正在使用 C:\Users\Administrator\Desktop\test.bat。

test.bat 非常简单,它只包含以下内容: taskkill /im notepad.exe

它可以成功地运行。如果我打开记事本并双击 test.bat,那么 cmd 窗口会闪烁并关闭记事本。.bat 文件不是问题所在。

我在任务计划程序中创建的任务名称为“Test taskkill”(不带引号)。我可以在 Windows Explorer 中看到它的位置:C:\Windows\System32\Tasks\Test taskkill。

如果将任务设置为仅在用户登录时运行,则该任务可以正常工作。使用此设置,我可以右键单击它 > 运行,并且我会得到与双击 .bat 文件相同的行为。这意味着任务已正确配置。

如果我将它设置为无论用户是否登录而运行,则右键单击 > 运行时没有任何明显的反应。历史记录中报告了已成功运行该作业,但记事本仍保持打开状态。我知道我正在使用要配置任务运行的帐户的正确凭据。该帐户是本地管理员。

这个问题看起来类似于其他人以前遇到的问题:

在计划任务中运行 .bat 文件的问题

http://social.technet.microsoft.com/Forums/windowsserver/en-US/d47d116e-10b9-44f0-9a30-7406c86c2fbe/scheduled-task-wont-run-bat-file?forum=winservermanager

第二个链接中的帖子解决了许多人的相同问题,建议运行任务的帐户需要明确允许访问.bat文件以及.bat文件修改的所有文件。 这是非常有前途的(如果是一个令人讨厌的要求)。 但是,我已经确认或分配了本地管理员对以下区域的明确权限,但仍然失败:

  • C:\ Users \ Administrator \ Desktop \
  • C:\ Users \ Administrator \ Desktop \ test.bat
  • C:\ Windows \ System32 \ Tasks \
  • C:\ Windows \ System32 \ Tasks \ Test taskkill

此外,我已确认本地管理员帐户位于本地管理员组中。

我是否缺少其他需要设置的权限? 我还应该看什么? 谢谢!


你有勾选“使用最高权限运行”复选框吗? - ths
抱歉,是的。我应该明确说明,但我确实这样做了。 - MasterOfNone
我可能已经解决了这个问题。我会尽快告诉你(可能明天)。 - MasterOfNone
1
我在Windows 10中完全遇到了同样的问题。 - TharsDimitris
7个回答

38

在我的机构中,有一个承包商为我做其他工作,他帮助我解决了这个问题。

在任务的属性窗口中,进入“操作”标签页,在创建或编辑打开批处理文件(在我的情况下是test.bat)的操作时,有一个“程序/脚本:”字段,还有一个“起始位置(可选):”字段。我之前将“程序/脚本:”字段设置为文件的完整路径,以文件名结尾,并且“起始位置(可选):”字段为空。当任务在任务的属性窗口的“常规”标签页中被设置为“仅在用户登录时运行”时,此配置似乎可以正常工作。然而,当将任务设置为“无论用户是否登录都运行”时,此配置无法正常工作。

为了解决这个问题,我改变了操作,使得“程序/脚本:”字段仅包含文件名,而不是文件路径。我把文件路径放在“起始位置(可选):”字段中。当任务被设置为“仅在用户登录时运行”时,此配置可以正常工作!我已经通过触发器和手动运行测试了该任务。


4
需要翻译的内容:doesn't work for me, only if i change the selection of radio button. maybe you can upload some screenshots how exactly you populated the fields.我的意思是如果我不改变单选按钮的选择,它就无法正常工作。也许你可以上传一些截图,展示你如何填写这些字段。 - Adir D

3

不确定这是否有帮助,但我的问题也与交互式程序(特别是 Excel)有关。

创建两个空文件夹(桌面),可以解决此问题。即使您在 x64 上运行,也请同时创建这两个文件夹。

C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop

我调试了我的代码,发现代码在这一行退出

ExcelFile excelFile = new ExcelFile(directory, filename);

我曾在某处阅读到这个解决方案,但现在无法找到其链接。


当我在批处理文件中使用Excel宏时,这个对我很有效。 - David
非常感谢。这对我很有效。同样的事情,我有一个执行Excel宏的任务。我真的没想到这会起作用,但它确实产生了魔力。非常感谢! - dark_amadeus7

2

以下是我验证过的内容:

1)任务计划程序中的“如果用户未登录,则运行”选项对于交互模式下的程序不起作用。例如记事本、时钟等。任务将不会以交互方式运行。确保您的程序不需要任何交互操作。

2)检查“启动位置(可选)”。如果您的程序路径不是系统路径之一,最好将程序路径添加到其中。在“程序/脚本”中只输入程序名称,在“启动位置”中输入脚本路径。

3)为您的程序设置的用户帐户必须具有权限,不仅可以运行您的程序本身,还可以运行与您的程序相关的所有其他程序。

这是一个示例程序:

位于C:\myprogram\folderOne\test.cmd

date /t >> c:\Temp\testAuto.log
date /t >> c:\temp\testAuto.log
echo ----->> c:\temp\testAuto.log
cls
exit

创建一个任务,在“常规”>“安全选项”中选择“无论用户是否登录”,在“操作”>“程序/脚本”中输入test.cmd,在“启动位置”中输入C:\myprogram\folderOne,运行后你可能会看到cmd窗口很快地打开和关闭。testAuto.log文件应该在c:\tmp文件夹中。

2

也可以试试这个...

通过设置“批处理作业登录”安全策略来解决“无论用户是否登录都运行”的问题。

以下是有关该设置的详细信息... https://danblee.com/log-on-as-batch-job-rights-for-task-scheduler/

您也可以采取其他方法,但以下是步骤... 1)将我的管理员帐户(我使用该帐户启动任务)添加到“批处理作业登录”安全策略中,以更新默认域组策略。 (即使列出了ADMIN组,而且我正在使用管理员帐户) 2)在客户端上强制执行GPUPDATE 3)重新启动客户端 4)查看客户端上的策略,确保它已从DC传输过来 5)设置任务“无论用户是否登录都运行” 6)按需运行任务,它将创建一个PDF文件。 7)注销并在计划时间运行任务,它将创建一个PDF文件。


每次这都是我的服务器上遇到的问题。 - AquaAlex
链接失效。 - Silent Sojourner

0

我曾经遇到了类似的问题,但与我的可执行批处理文件路径中有一个空格有关。我已经移除了这个空格,现在它可以正常工作了。


所以你的问题是因为你打错了字?这对其他人可能没有什么用。 - TylerH
3
不,这并不是打字错误!空格确实出现在路径中,因为批处理文件的路径带有空格。我的做法是改变批处理文件的路径,移除了空格;比如将路径由"D:\My Jobs\executethis.bat"改为"D:\MyJobs\executethis.bat"。我需要创建一个新目录,没有空格。 - FerFig

0

对我有用的是确保路径可用。

我使用了 net use Z: \computername\folder /persistent:yes

然后是 xxcopy /s /c /d /e /i /y D:*.* z:\BackupBat

我注意到所有其他 .bat 文件都可以正常工作,只有引用映射文件夹的那个没有运行,所以这可能是问题所在。通过这些更改,批处理文件可以正常运行。


-4

这可能是因为您没有权限。我曾经遇到过同样的问题,我找到了解决方法 - 打开任务计划程序,右键单击您的任务,然后选择属性选项。 在属性中,单击常规选项卡,然后单击“用户组或用户”,选择适当的用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接