我正在尝试从任务计划程序在 Windows 7 上运行批处理文件。如果我从命令提示符运行批处理文件,则可以正常运行它。
如果我从任务计划程序运行它,使其仅在用户登录时运行,则任务将正常运行。但是,当它在用户未登录时运行时,任务计划程序看起来就像在运行文件,但什么也没发生。
我尝试将批处理文件更改为以下行,以确保这不是由于批处理文件中的内容造成的:
echo "success" >> c:\temp\test.log
但那不起作用。有什么想法吗?我以最高权限运行它,并使用对批处理文件和正在写入文件的文件夹具有完全权限的管理员帐户运行它。
答案1
任务计划程序:计划的批处理脚本未运行
任务计划程序属性...
从 WindowsTask Scheduler
开始Properties
(见最底部的屏幕截图)在里面。 。 。
1.
General
选项卡,确保以下选项被选中/选中或取消选中,如图所示打印屏幕A- 取消选中
Run only when user is logged on
- 查看
Run whether user is logged on or not
- 查看
Run with the highest privileges
- 取消选中
2.
Conditions
选项卡,确保以下选项选择,已检查, 或者未选中正如所示打印屏幕B- 查看
Wake the computer to run this task
- 查看
3.
Actions
选项卡,点击Edit
,并确保设置Start in (optional)
如下例所示(不要用双引号括起来)表示批处理脚本所在位置的完整路径没有最后一个反斜杠“\
”打印屏幕 C
安全注意事项
一旦您按下
OK
(2.上面)它会提示你输入运行此命令所需的凭证,而这个凭证就是需要访问EXECUTE
批处理文件所在的位置,并且它还需要访问权限才能执行您编写的批处理文件所运行的任何内容。最好为该进程设置一个静态服务/代理用户帐户,然后使用其凭据来运行该进程。您需要确保其密码强且设置为永不过期——并且它需要访问
EXECUTE
批处理并运行批处理脚本进程正在运行的任何命令和资源等。它也利用了。看来
Run whether user is logged on or not
您必须检查该选项Run with highest privileges
才能真正按照任务计划程序的预期运行。
错误检查
如果实际的批处理脚本存在问题,但 Windows任务计划程序实际上确实执行了它来运行它,但是批处理脚本逻辑出错了,等等,无论出于什么原因,任务计划程序可能在这个级别看不到此故障。从它的角度来看(大多数情况下默认),它正在执行批处理文件,因此只要它可以执行并且有权执行,它的工作就算成功完成。
添加错误检查或者日志记录批处理脚本逻辑抓住(或者排除故障) 这一级别的问题包括确保批处理调度程序执行它的安全上下文对批处理脚本运行时的命令、资源等具有适当的访问权限。
组策略注意事项
回答: 在 Windows 上,此权限是通过当地的或者域安全策略. 要执行此操作,请使用本地安全策略, 按着这些次序。
- 在里面控制面板, 打开管理工具, 然后本地安全 政策。
- 下面安全设定, 打开当地政策并突出显示用户权限分配。
- 定位作为批处理作业登录。 打开特性并添加任何需要此权限的用户。
- 等结束了,节省您的更改并关闭本地安全设置窗户。
您的更改应立即生效。要更改域安全策略,请在域控制器上使用域安全策略实用程序在里面控制面板
具有映射驱动器或完整 UNC 路径的批处理脚本逻辑以及问题。...
如果您的脚本引用了映射的网络驱动器但您希望它这样做Run whether the user is logged on or not
,那么在这种情况下,驱动器映射可能实际上并不适合批处理过程执行预期的操作。
如果可能,请UNC
在批处理脚本逻辑中使用路径而不是映射驱动器号以避免出现问题。否则,您可能需要PUSHD \\ServerName\ShareName
在批处理开始时使用,然后POPD
在批处理结束时使用。您可以NET USE X: \\ServerName\ShareName
在批处理开始时使用映射驱动器,然后NET USE X: /DELETE
在批处理结束时使用断开驱动器。
其他的
MS HOTFIX (KB977353):组策略即时任务首选项无法在运行 Windows 7 或 Windows Server 2008 R2 的客户端计算机上运行
查看计划任务的
Settings
选项卡和列出的选项Stop the task if it runs longer than:
。如果选中此选项,并且时间段小于正在运行的脚本,任务计划程序将提前终止它,因此您可能无法获得预期的结果。为了以防万一,这是在进行故障排除时要检查的另一件事。在
Triggers
计划任务的选项卡中选择该Edit
选项时,请确保将Start:
时间和日期设置为尚未过去的值。确保将日期和时间设置为未来否则,您可能会注意到,该作业表明它按计划在下一个计划时间运行,正如您所期望的那样;但是,它并没有被执行任务计划程序也没有任务计划程序History
选项卡显示它曾经被执行过(因为它没有被执行过)。如果您遇到此问题,只需编辑触发器并使用未来日期和/或时间对其进行更新即可解决。
打印屏幕
打印屏幕A
打印屏幕B
打印屏幕 C