我的脚本不会在任务调度程序下运行。为啥?
Posted
技术标签:
【中文标题】我的脚本不会在任务调度程序下运行。为啥?【英文标题】:My script won't run under the task scheduler. Why?我的脚本不会在任务调度程序下运行。为什么? 【发布时间】:2010-10-14 11:32:59 【问题描述】:我有一个 vbscript 脚本,我自己运行它时运行良好。
由于某种原因,当我以管理用户身份在任务计划程序下运行它时,它会运行,但甚至不会写入我的日志文件。它不应该是权限,因为 我运行它的用户是管理员。
它是一个在 Win2008 64 位机器上调用 32 位 dll 的脚本。
C:\windows\SysWOW64\cscript.exe Bob.vbs
我还将本地目录设置为运行它的位置。
具有讽刺意味的是,任务调度程序说“成功完成”了任务的运行。
另外,任务调度器中还有其他脚本运行良好,就是这个脚本。
有人有我可以检查的清单吗?
【问题讨论】:
这并不讽刺:任务调度程序已经完成了任务的运行。任务本身或 cscript 就是这里的内容。 你也想在哪里写?希望没有任何网络驱动器不会出现在管理员面前。您是否可以简单地以管理员身份登录并尝试运行脚本以查看遇到的错误?您是否依赖于管理员不会提供的任何路径或其他环境设置? 你能贴出 Bob.vbs 的代码吗? 【参考方案1】:我在 Windows 2008 Server 和 Windows 7 上遇到了 DOS 批处理文件和 VB 脚本的问题。在每种情况下,一旦我为计划任务操作设置“开始于”文件夹,一切正常。
【讨论】:
设置可选的“start in”参数允许我的所有脚本在 Windows 7 / 2008 R2 机器上正常运行。几天来我一直在努力解决这个问题。谢谢!【参考方案2】:我在我的 SVN 服务器上运行计划任务时遇到了类似的问题。
我的脚本正在写入我认为是当前工作目录(我为任务指定为“开始”文件夹的目录)。如果我登录到服务器并运行脚本,它工作正常。当作为计划作业运行时,它不会。
在我的情况下,调度程序似乎将工作目录重新分配为在 TEMP
环境变量中为用于运行作业的用户帐户指定的目录,而不是我为任务指定的目录( “开始于”文件夹)。
检查帐户的TEMP
文件夹,看看你的文件是否在那里。
【讨论】:
如何使其在指定的“开始于”文件夹中工作。【参考方案3】:如果您正在运行 Win2008 64 位计算机:这(最终)在同一台服务器上为我工作。任务调度器运行一个批处理文件(例如runvbs.bat)来调用带有32位版本的命令行解释器的cscript,像这样:
@echo off
%windir%\syswow64\cmd.exe /C "c:\windows\system32\cscript.exe //B //nologo import_some_data.vbs"
注意双引号。
我使用管理员组获取权限并以最高权限运行。
配置用于:Windows® 7、Windows Server™ 2008 R2
在“编辑操作”对话框中,我有:
动作:启动程序
程序/脚本:runvbs.bat
开始于:c:\inetpub\wwwroot\asp\importstuff\
【讨论】:
【参考方案4】:我对此有真正的问题(早上好)并找到了这个解决方案here:
在 Windows 任务计划程序中,我必须单击“更改用户或组”按钮并添加“管理员”组。
希望它可以帮助某人。
【讨论】:
【参考方案5】:对于 Windows 2008,您可能需要确保任务以管理权限运行。
常规选项卡 -(选中)以最高权限运行
【讨论】:
【参考方案6】:解决了同样的问题。 脚本在连接到数据库时会失败,然后在修复创建 Xls 文件时失败后。 我创建了一个 bat 文件并将以下内容添加到其中。这个 bat 文件将调用我的 vb 脚本并以 32 位模式运行它。
%windir%\SysWoW64\cmd.exe /C "c:\windows\system32\cscript.exe //B //nologo C:\ScheduledJobs\PrimeReconDev\myVBScript.vbs"
我设置了任务计划来执行包含上述内容的bat文件,并将执行用户分配给管理员。通过在常规选项卡上单击“更改用户或组”选项来执行此操作。一旦完成,我就能够成功执行没有问题。 我最初以我的身份执行并且我在管理员组中,但它仍然失败。以内置管理员的身份执行就可以了
【讨论】:
【参考方案7】:我过去曾遇到过类似的问题,即在调度 vbs 脚本时代码未执行 - 这可能是个问题!也很想知道是否有人可以解决这个问题。 (顺便说一句,我们通过将代码重写为 C# 控制台应用程序来解决它)
【讨论】:
C# 会比乱用 VBScript 好得多。我将不得不向老板建议:) 我曾经遇到的唯一问题是尝试直接运行 VBS 文件(没有传递任何参数)。这是通过使用 cscript 解决的,这显然不是这里的情况。不过,SysWOW64 交互是我所关注的。【参考方案8】:当我遇到这个问题时,通常是因为在我的任务上运行的程序出错了,即使已完成任务的返回值没有报告任何问题。
您说它运行但不写入您的日志 - 它是否可能在写入您的日志之前崩溃?
如果您还没有,请在脚本中添加错误处理并尝试记录任何错误,或者至少尝试跟踪脚本的执行情况。
【讨论】:
【参考方案9】:在我将存储 bat 作业的路径添加到操作选项卡上的 Start in 之前,我遇到了同样的问题。
右键任务→属性→操作→编辑开始于(可选)
只需填写您的 bat 作业的路径即可。
【讨论】:
【参考方案10】:我遇到了同样的问题。
我通过使用相对路径(“logs\log”)而不是我之前使用的绝对路径(“U:\workingDirectory\logs\log”)来修复它。
显然,当您通过任务调度程序执行脚本时,您需要使用相对路径。
【讨论】:
【参考方案11】:我也有同样的问题。 在 Task -> Run 字段中使用下一个字符串 CMD /C“我的 VBScript 的完整路径” 喜欢 CMD /C c:\Test\MyScript.vbs
【讨论】:
【参考方案12】:想通了,但现在我知道了,我会分享。
在服务器 2003 上运行良好的脚本,尝试移动到服务器 2012 并且部分脚本无法运行。
必须创建一个新任务并在常规选项卡上选择“windows server 2003、Windows XP 或 Windows 2000 的配置。如果您使用基本任务,则此选项不允许用于 2003,您必须使用新任务。
【讨论】:
【参考方案13】:替代解决方案:
► 仅在用户登录时运行
在任务管理器中进行选择。
这就是为我解决的问题(在 3 台单独的计算机上 - Win7 Pro、Win12 Server)
我希望它可以帮助别人。
【讨论】:
以上是关于我的脚本不会在任务调度程序下运行。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
从 Windows 任务调度程序在虚拟环境中运行 python 脚本