2023年11月27日发(作者:)
Windows2008r2任务计划程序执⾏批处理失败问题解决⽅法
最近遇见⼀个奇怪的现象,在做某系统的定期备份的时候使⽤到了⾮系统⾃带Rsync命令,但是⼿动启动没问题,⽽且⼜⾮常期望批量化在多台
主机上进⾏,怎么办呢?Windows Server 2003下⾯这样执⾏任务计划没问题,⽽就Windows Server 2008 R2下⾯出现意外。
· 代码 0 或 0x0:操作成功完成。
· 代码 1 或 0x1:调⽤的函数不正确或调⽤了未知函数。
· 代码 10 或 0xa:环境不正确。
· 代码 0x8009000f:常规访问被拒绝
Figure 1看到上次运⾏结果出现⾮0情况
这种⾮〇情况表⽰的是不能被接受的。
通过对这个批处理设置断点,我看到了这样的报错信息。
Figure 2在批处理中加⼊Pause 进⾏断点,查看错误信息
很明显,这个rsync不是系统⾃带的程序和⽂件,因此⽆法被系统直接调⽤,猜测和环境变量有关,仔细寻找Windows Server 2008 R2 下⾯的任
务计划选项,我看到了这个填空的地⽅。
Figure 3起始于(可选)项
我将这个填写成了该条脚本的所在的⽬录,再次运⾏该任务计划,得到返回成功的标记,并且在服务本分服务器端受到相应的备份内容。
这⾥回顾⼀下,两个版本操作系统的任务计划的不⼀样,Windows Server 2003 下⾯可以选择的内容,项⽬并不多,不过他默认的情况下会将起
始于填写进去,使⽤的就是所在脚本的上⼀级⽬录。
Figure 4 Windows Server 2003 下⾯的起始于,默认被填写
因此设置Windows Server 2008 ,2012这样的基于Nt6核⼼的系统的任务计划的时候建议将起始于进⾏⼀下设置。
以下是其它⽹友提供的⽅法
第⼆种解决⽅法:
1、创建任务计划时,要在常规选项卡⾥选中“不管⽤户是否登录都要运⾏”、“使⽤最⾼权限运⾏”、配置选带有“Windows Server 2008 R2”这三个
选项,
2、在操作选项卡⾥的“起始于(可选)”要填上bat批处理⽂件所在⽬录,windows 2003是在选择bat批处理⽂件⾃动带上的,⽽2008不会,虽然
它提⽰是可选的,但是不填的话,执⾏会失败;
3、所有信息都填写完整后点确定时需要输⼊运⾏此任务的⽤户帐户密码;
第三种解决⽅法:
下⾯我贴⼀个完整的计划任务图⽰:
创建计划任务
计划任务操作⼀(此情况符合单个可执⾏程序或者脚本不调⽤数据库情况下)
计划任务操作⼆(此情况符合运⾏程序需要调⽤⽬录数据库情况、PS:这个通吃吧貌似j
后⾯默认即可
其问题就在于编辑操作的选项⾥⾯的起始于(可选)选项。
真正问题找出来觉得很讽刺呢
贴这个帖⼦是想给⼤家⼀个出现问题有据可查的建议。哈哈,⾃⼰也能做个标记以防忘记。
第四种解决⽅法:
今天在Windows Server 2008 ⾥新建了⼀个定时任务,通过定时任务执⾏的bat⽂件中的sql命令
结果查看定时任务的历史记录,发现卡住了
提⽰已经启动定时任务,但是bat中的操作⼀直没有执⾏
刚开始怀疑bat⽂件中有错误,换成了最简单的打开记事本的命令notepad,发现问题依然存在
后来发现有⼀个很有意思的地⽅,新建定时任务的时候,有2个选项:创建基本任务和创建任务
之前是创建的基本任务,后来换成创建任务
然后,问题就解决了
第五种解决⽅法:
新建⼀个管理员帐号,然后⽤新帐号运⾏就可以了。
第六种⽅法:其实就是第⼆种⽅法的补充
解决办法:
如图:编辑任务 把批处理⽂件的起始位置加上如:在d:
那么起始位置就是:d: 注:路径中不能有引号
第七种⽅法:
使⽤windows server 2008 R2 的任务计划程序需要启动服务 Task Scheduler 服务,
windows server 2008 R2 默认状态下Task Scheduler 服务是禁⽌的并且不可切换启动类型,
解决⽅法:修改注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesSchedule 下的start项数值为2
修改后重启服务器,任务计划程序就可添加使⽤。
第⼋种⽅法:
⽹络环境:windows2003+windows2008.
描述:在win2003内使⽤映射驱动器Z:映射win2008的⼀个⽬录,
在win2003中创建bat ⽂件copy Z:中的⽂件,并做任务计划bat定时执⾏.
命令⾏直接执⾏bat没有问题,执⾏任务计划失败.
最终的解决⽅法是参考下⾯的⽂章,在bat⽂件中添加:
NET USE Z: $XXXX "Password" /User:"Administrator"
----
另:win7下映射驱动器Z:,添加任务计划执⾏bat⽂件 Copy Z:...没问题,
不存在需要⼿⼯添加命令net use的bug.
重启Win7后,任务计划消失,但其他程序创建的任务计划存在,
最后通过排除法检查发现是由于360软件作怪!需要把bat ⽂件和job⽂件同时都加⼊⽩名单.
任务计划⽆法正常运⾏批处理⽂件的⼏种解决⽅法
Windows 任务计划与 BAT 批处理⽂件都是我们经常使⽤的⼯具,⼀个可以帮助我们定期执⾏计划的任务、
⼀个可以帮助我们⼀次执⾏⼀系列预先编好的命令。在 Windows 系统的维护⼯作中,我们经常需要将任务
计划与批处理配合起来使⽤,即通过设置任务计划定期执⾏批处理⽂件定义的⼀系列命令与操作。
有时候,我们可能会遇到任务计划与批处理⽆法正常协同⼯作的情况。例如,⼀个同样的批处理⽂件,我们
可能⼿动运⾏它时⼀切正常(说明批处理⽂件的内容没有错误),但将这个批处理⽂件添加为任务计划后却
⽆法按照预期运⾏。笔者在微软中⽂论坛收集了⼏种解决任务计划与批处理⽆法协同⼯作的⽅法,希望可以
帮助⼤家在遇到类似问题时参考。
1. 在任务计划中正确设置执⾏批处理的⽤户⾝份与权限。
当我们在任务计划中添加新任务时,其中有⼀个步骤是指定运⾏此任务的⽤户帐户,并需要输⼊⽤户帐户的
密码进⾏确认。如果任务计划设置的⽤户帐户⾝份或权限,与我们⼿动运⾏批处理⽂件时的⽤户帐户不同,
就可能会出现以任务计划⽅式运⾏批处理的结果与⼿动运⾏同样的批处理时结果不同的现象。
例如,假设⼀个批处理涉及的命令需要管理员权限或者特定⽤户帐户的配置⽂件才可以正常运⾏,如果执⾏
此批处理的任务计划被指定为⼀个⾮管理员帐户或不具备相应⽤户配置的⽤户帐户,那么此批处理很可能在
以任务计划的⽅式运⾏时⽆法得到其预期的效果。因此,当我们在添加任务计划并希望以另⼀个⽤户帐户的
⾝份与权限运⾏批处理时,⼀定要在添加新任务向导中检查运⾏批处理的⽤户帐户⾝份与权限是否满⾜运⾏
此批处理的要求。
2. 通过快捷⽅式为批处理指定起始位置。
有些批处理⽂件需要我们为其设置好特定的“起始位置”才可以正常运⾏,否则可能会遇到批处理⽆法找到
指定路径的错误。当我们⼿动执⾏批处理时,⽆论是在资源管理器中⽤⿏标双击运⾏批处理,还是⾸先打开
命令提⽰符窗⼝、然后再在命令提⽰符中执⾏批处理,资源管理器当前打开的⽂件夹位置与命令提⽰符当前
所在的提⽰符位置都已经⾃动为我们设置好了执⾏批处理时的起始位置。然⽽,当我们以任务计划⽅式执⾏
批处理时,任务计划却⽆法⾃动指定执⾏批处理时所需的起始位置,这样也可能会造成以任务计划⽅式执⾏
批处理时⽆法得到预期的效果。
为了解决这⼀问题,我们可以⾸先为批处理⽂件建⽴⼀个快捷⽅式,然后修改快捷⽅式的属性,在“常规”
选项卡中设置正确的“起始位置”,接下来我们再添加任务计划,将新任务指定为这个快捷⽅式⽂件⽽不是
批处理本⾝。这样,任务计划会在任务指定的时间⾃动执⾏指向批处理的快捷⽅式,对应的批处理在运⾏时
就具有正确的起始位置了。
3. 尽量避免在批处理内容中出现过多的引号。
如果在批处理⽂件的内容⾥出现了过多的引号,即批处理中有⼀条或多条命令及参数被引号扩起来,这不仅
可能在编写批处理命令时容易出错,⽽且可能会造成特定版本 Windows 的任务计划⽆法正确识别批处理中
包含的命令。特别是在⼀个⽗级引号中还有⼦级的引号时,尤其容易出现此类问题。
根据微软知识库 KB951246 提供的信息,这个问题主要存在于 Windows Vista/Server 2008 系统。
4. 将批处理⽂件转换为可执⾏⽂件或脚本后再添加任务计划。
有时当任务计划⽆法正确执⾏批处理⽂件的部分内容时,我们还可以尝试将批处理转换为其它格式的可执⾏
⽂件或脚本,然后再添加⾄任务计划。转换格式虽然执⾏的命令与任务不变,但将批处理转换为可执⾏⽂件
或脚本可以改变任务运⾏的顺序与⽅式,有时说不定可以解决问题。
批处理常见的格式转换包括将 .BAT ⽂件转换为 .EXE 或 .COM 可执⾏⽂件,或者转换为 .VBS 脚本,这类
转换可以通过 BAT2EXE、BAT2COM、BAT to EXE Converter、批处理加密转换器等第三⽅软件实现。


发布评论