Kne*_*tic 1 windows scheduled-tasks windows-task-scheduler windows-server-2012
我有一个需要在 E:/ 驱动器上运行的可执行文件,Windows Server 2012 安装在 C:/ 驱动器上。我创建了一个计划任务,其中包含目标可执行文件的完整路径 (E:/stuff/target.exe),并设置了工作目录 (E:/stuff/)。
这失败了,任务调度程序告诉我目录名称无效。如果我删除工作目录,它会告诉我访问被拒绝。这不可能是正确的,整个驱动器都是共享的,并且文件权限设置为“所有人”,具有完全控制权。运行任务的帐户肯定可以运行它(我可以通过 cmd.exe 执行此操作)。旁注:我已经尝试了路径的所有排列,使用反斜杠、正斜杠、引号和非引号。这不是由于KB2452723。
我试过有一个批处理文件,它使用“CD”将工作目录设置为 E:/stuff/,然后调用该程序,该程序在我运行时有效。不幸的是,当通过任务计划程序运行时,它永远不会更改工作目录,并尝试从系统驱动器(它不存在的地方)调用 target.exe。
我还尝试创建从 C:/temp/ 到 E:/stuff/ 的符号链接(“mklink /D”),但希望我能骗过任务调度程序,但它不会遵循链接,并且告诉我找不到目录。
我不明白为什么任务调度程序会如此努力地解决这个问题,也不知道正确的做法是什么才能让它发挥作用。有没有人使用任务计划程序在非系统驱动器上成功运行文件?
服务或任务看不到驱动器映射。请改用 UNC 路径。
\\server\share\directory\someprogram.exe
Run Code Online (Sandbox Code Playgroud)
另一种选择是安排一个批处理文件运行并在其中包含驱动器映射。在批处理文件中,使用pushd/popd进行映射更容易,而不必担心它获得的驱动器号(pushd可以映射到驱动器号并切换到该驱动器号,popd可以取消映射并返回到之前的驱动器号)。
pushd \\server\share
\directory\someprogram.exe
popd
Run Code Online (Sandbox Code Playgroud)
在用头撞墙几个小时后,我找到了解决方案。似乎在 Server 2012 中,计划任务无法访问对您用于运行文件的帐户没有明确允许权限的目录。该帐户是否在允许进入目录的组中并不重要。
例如,如果我想使用帐户 THINGS\svcAccount 运行 E:/stuff/target.exe,那么必须明确授予THINGS\svcAccount对 E:/stuff 的完全控制才能运行。我曾假设如果 THINGS\svcAccount 在管理员组中,并且管理员组完全控制 E:/stuff,它将继承权限。Server 2012 没有这样做。
这似乎只适用于计划任务 - 运行命令窗口或 powershell 窗口,因为 THINGS\svcAccount 完全按预期工作。
| 归档时间: |
|
| 查看次数: |
19525 次 |
| 最近记录: |