Windows任务计划程序无法运行VBScript

12

我试图通过使用Windows任务计划程序来自动化一个VBScript。然而,我尝试使用 cscript.exe + "C:\...\script.vbs" 但它没有运行。我也尝试在CMD中直接运行相同的命令 (cscript.exe "C:\...\script.vbs"),它可以正常工作。

可能出了什么问题?

编辑:

我刚刚尝试将设置从"无论用户是否登录都运行"切换到"仅在用户已登录时运行",这样它就能够工作了。我想知道是否有一种方法可以使我的任务计划在用户注销后继续运行。


我在想是否有一种方法可以使我的任务即使用户已注销也能被调度 - 难道你不是刚刚发现了如何做到这一点吗? - paxdiablo
1
在搜索和尝试了数十种变化后,终于找到了解决此问题的方法:必须在用户登录时运行...这很遗憾,但事实就是如此...我猜这是因为我的VBScript文件正在调用Excel(它在保存Excel文件之前刷新数据连接并计算公式)。 - flo5783
@flo5783 你可以尝试一下我的答案 https://dev59.com/ll0b5IYBdhLWcg3wC9eJ#34912755;这样你就不需要选择“当用户登录时”了。 - lovechillcool
@lovechillcool 我试过了,但没成功;Windows 会话确实需要已登录并且打开(或者至少锁定)。 - flo5783
8个回答

11
经过数小时的研究,我发现了来自微软的Blake Morrison博客之一;其中提到:

如果运行.vbs/.ps1脚本,请尝试从.cmd/.bat脚本启动

请参见Help! My Scheduled Task does not run…

该博客还解释了使用任务计划程序时的许多规则/提示。

因此,请创建一个调用您的VBScript的.cmd/.bat文件。例如:cscript.exe YourScript.vbs将在您的.cmd/.bat脚本中。


4

编写一个类似这样的批处理文件:

echo "Started!" > c:\foldergoeshere\log.txt
cscript.exe "C:\...\script.vbs" > c:\foldergoeshere\log.txt
echo "Stopped!" > c:\foldergoeshere\log.txt

那么将批处理文件安排为计划任务,而不是vbs。 这将允许您查看阻止其运行的事件。 在控制台(CMD)中执行时可能看到的任何错误,现在都会在“开始!”和“停止!”之间输出到日志文件中。


1
请使用>>代替>。使用>会覆盖先前的内容。 - Brian

3

格雷格回答了这个问题,https://superuser.com/a/816073

基本上你需要创建两个文件夹:

你必须创建一个文件夹(64位windows系统需要创建两个):

(32位, 永远都是) C:\Windows\System32\config\systemprofile\Desktop

(64位) C:\Windows\SysWOW64\config\systemprofile\Desktop

对我来说解决了这个问题(而且我可以指向 .vbs 文件,不需要.bat 文件)。


这解决了我的问题。我可以通过双击来运行 .vbs 文件,但在任务计划程序中安排它时却不能运行。创建 \Desktop 文件夹后,它就可以工作了。这几乎让我心脏病发作。 - Jingwei Yu

3
这是关于什么麻烦?我不使用.cmd/.bat,脚本也能运行!(这里是Windows7)
我的VBS脚本(作为计划任务)在以下4种情况下均可正常运行:
  1. cscript和选项“仅在用户登录时运行”
  2. cscript和选项“无论用户是否登录都运行”
  3. wscript和选项“仅在用户登录时运行”
  4. wscript和选项“无论用户是否登录都运行”
只有在第1种情况下,我会遇到黑色命令窗口在屏幕上闪烁的问题。
操作设置如下:

cscript
或者
wscript

我的脚本很简单,只是创建一个文件:
Set objFSO = CreateObject("Scripting.FileSystemObject")
filename = "C:\Temp\" & Hour(Time) & Minute(Time) & Second(Time)
Set objFile = objFSO.CreateTextFile(filename)

你试过在注销后它是否能正常工作吗?顺便说一下,我正在使用Win Server 2012。 - lovechillcool
@lovechillcool - 是的,对我来说它能够正常工作。当选择“无论用户是否登录”时,任务计划程序可以成功地通过cscript.exe或wscript.exe调用我的VBS脚本,即使我没有登录也可以。 - ZygD
我怀疑问题出现在使用Office应用程序时,所以上面的脚本应该没问题。 - Andrew Spencer

1
你可以做到这一点。
  1. cmd as the Program.

  2. /c start cscript //nologo "W:\Pathto with spaces\VBScript.vbs"
    
    • /c send the following to the cmd

    • start starts the next parameter

    • cscript //nologo "W:\Path with spaces\VBScript.vbs" self explanatory. Path wrapped in quotes to allow spaces in the filename.

      Screenshot

      enter image description here


1
.vbs文件正在隐形运行,这是使用“登录或未登录”选项运行它的后果。
您将不被允许干扰使用计算机的用户,这意味着您可以自己帮助自己,但不能帮助他人。
请阅读任务计划程序帮助菜单中的以下文本:
任务安全上下文
您可以指定一个任务应该在触发任务时计划运行的帐户未登录时运行。
为此,请选择标记为“无论用户是否登录”的单选按钮。
如果选择了此单选按钮,则任务不会交互式运行。
要使任务交互式运行,请选择“仅当用户已登录时运行”的单选按钮。

1

曾经多次遇到过VBScript作为计划任务运行数月甚至数年后突然无法工作的情况,尽管没有进行任何更改。已经尝试了这里和其他地方提供的所有方法来重新激活该任务,但都没有成功。我的解决方法是创建一个新的计划任务,并将所有设置从原始任务中复制。


0

我在Microsoft Windows [Version 6.1.7601]上尝试了这个方法

版权所有(c)2009 Microsoft Corporation。保留所有权利。

也就是Windows 7,但是在我的情况下,我先cd到目录,然后运行.bat文件来执行.vbs文件

  1. 打开开始菜单
  2. 搜索运行
  3. 一旦运行打开,输入"shell:startup"并按Enter键

您将被引导到启动文件夹。在此文件夹中,您可以创建一个.bat文件,用于执行.vbs文件(您需要以特定的方式进行此操作)

cd C:\the\path\were.vbs\file\located && wscript.exe start_app.vbs

你所做的是先cd到目录 cd C:\the\path\were.vbs\file\located

然后运行.vbs文件 wscript.exe start_app.vbs


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接