来自计划任务的批处理文件返回代码2147942401

时间:2018-01-19 15:05:33

标签: windows batch-file scheduled-tasks

我正在尝试安排作业以使用Windows 10任务计划程序运行批处理文件,但它会返回代码2147942401.

批处理文件位于远程位置,因此我给出了绝对路径
" \\ server1 \ file传输\ data files \ inbound \ abc \ csv \ excel-to-csv.bat"

如果我使用命令提示符运行批处理脚本,那么它可以正常工作。 Properties - General Actions - Edit Action

批处理脚本是将excel转换为文件到csv。

脚本的内容是:

FOR /f "delims=" %%i IN ("\\server1\file transfers\Data Files\Inbound\abc\CSV\*.xlsx" ) DO to-csv.vbs  "\\server1\file transfers\Data Files\Inbound\abc\*.xlsx" "%%~ni.csv"

它调用另一个VB脚本to-cvs.vbs

如果我在@Steinspecht提到的Action选项卡中进行了更改(任务调度程序 - 任务已成功完成,退出代码为0x8007001),那么我也得到代码2147942401 Not sure whether Add a arguments is written correct enter image description here

6 个答案:

答案 0 :(得分:4)

任务计划程序的错误代码在msdn列为十六进制,您的代码2147942401转换为十六进制为0x80070001(未在此处列出),但this superuser将其描述为“非法函数” ”。他通过使用“最简单的任务调度程序设置并现在可以正常工作”来解决他的问题。我注意到他只在用户登录时运行他的任务,因此他不需要“以批处理作业登录”。

如果要在未登录时运行批处理作业,则需要一个名为“以批处理作业登录”的特殊权限。请注意,还有一个“DENY登录作为批处理作业”权限,您不需要。

Social Technet,您可以使用

分配该权限
  • 输入 secpol.msc / s
  • 在MSC snap in
  • 中选择“本地政策
  • 选择“用户权利分配
  • 右键单击“以批处理作业登录”,然后选择“属性”
  • 点击“添加用户或群组”,然后加入相关用户。

Local Security Policy Snap-In

您的任务调用网络资源。这些powershell scripters建议将这些资源带到您的本地计算机,以消除任何网络/连接/权限问题。

答案 1 :(得分:2)

在此处引发错误操作"powershell.exe" with return code 2147942401的另一个常见原因。如果您的操作参数不正确,您还将收到此错误消息。 检查动作参数参数和参数值的间距是否正确。

很好的例子:

-executionpolicy bypass -file "C:\Scripts\ImportFiles.ps1"

残破的示例(“ file”参数与其值之间没有空格):

-executionpolicy bypass -file"C:\Scripts\ImportFiles.ps1"

答案 2 :(得分:1)

即使所有任务计划程序设置,权限等均正确,此错误代码也可能由实际Powershell脚本中的错误/错误引起。就我而言,我引用的目录不存在。

答案 3 :(得分:0)

M Herbener的回答导致我尝试手动运行脚本,以查看脚本是否有错误。它没有,但是当我收到错误消息时它确实突出了问题所在:

  

[我的脚本]无法加载,因为此系统上禁用了正在运行的脚本。

当然,解决方案是运行Set-ExecutionPolicy以允许Powershell脚本运行。

答案 4 :(得分:0)

我知道一个老问题,但在Windows 2016服务器上却收到2147942401错误。

如果查看计划的任务属性,则在“常规”选项卡的底部,默认情况下将其配置为:Windows Vista,Windows Server 2008。

更改为Windows Server 2016,问题已解决。

答案 5 :(得分:0)

对我来说,该任务有时会起作用,有时却不会。根据“计划任务历史记录”,如果失败,则好像已运行40秒钟,什么也不做,并完成了action "C:\windows\SYSTEM32\cmd.exe" with return code 2147942401

  • 在这种情况下,组策略设置毫无意义,因为有时它会起作用,但并非每次都能起作用。

  • 简化,重新创建,重新配置任务无法解决问题(请参见https://superuser.com/questions/1172540/task-scheduler-task-completed-successfully-with-exit-code-0x8007001)。

  • 我也考虑过批处理我的批处理文件并摆脱标准的输出重定向,从而放弃了日志记录功能(并且变得盲目)。或者只是运行一个实际的.exe进程,而不是根本不使用批处理文件。这本来可以解决的。

  • 我还考虑过用服务替换“启动时”计划的任务,这对于这样一个小问题来说是一个相当昂贵的实验。

最终,我考虑在计划的任务上添加延迟,并希望将任务配置为延迟的服务-服务可以是“自动”或“自动(延迟启动)”。对于“在启动时”计划的任务,它是具有单独属性的触发器,包括添加延迟的功能:

Image depicting solution for delaying an on-startup scheduled task

我认为有时我的计划任务要提前几毫秒开始,并且某些OS服务或功能尚不可用或不允许。只需在触发器上添加一个小的延迟即可解决问题。