【发布时间】:2020-09-17 05:48:04
【问题描述】:
我们有一个旧的 Windows Server 2003 r2,它除了使用任务调度程序和一个 VBS 文件来检查和重命名一些经常重复出现的数据文件之外什么都不做。它设置为使用我的凭据每小时运行一次。如果我在登录时“运行”它,任务就会运行并正确完成。当没有人登录时,任务运行但以 0x1 代码完成,即失败。 我检查了事件日志,没有看到任何可以识别为错误或失败的内容。我们相信它在大约 6 到 8 个月前一直在成功运行(是的,它是其中之一设置它并忘记它的东西,我们没有定期检查它)。
=================附加信息================
我运行 assoc .vbs 并得到以下输出:.vbs=VBSFile
我不确定如何确定用户环境变量?
对于该任务,我尝试了 vbs 文件和包含对 vbs 文件的引用的 bat 文件。两者都在我登录时运行,而在我未登录时都无法成功完成。
这是 vbs 脚本:
Dim fso, file, recentDate, recentFile, theFile, myfolder, mypath
set fso = CreateObject("Scripting.FileSystemObject")
set recentFile = Nothing
mypath = "D:\TheFTP\Main\Camera\lobby"
set myfolder = fso.GetFolder(mypath)
For Each file in myfolder.Files
If (recentFile is Nothing) Then
set recentFile = file
ElseIf (file.DateLastModified > recentFile.DateLastModified) Then
set recentFile = file
End If
Next
fso.CopyFile mypath& "\" & recentFile.name, "D:\TheFTP\main\camera\cam3.jpg"
set recentFile = nothing
set fso = nothing
这是我将输出通过管道传输到文件的最后一个 bat 文件:
C:\windows\system32\cscript.exe c:\CopyWebCamFile.vbs > c:\debug.txt
我未登录时的Debug.txt输出显示错误,见下文,当我运行它并登录时不存在:
Microsoft (R) Windows 脚本宿主版本 5.6
版权所有 (C) Microsoft Corporation 1996-2001。保留所有权利。
CScript 错误:Windows 脚本宿主初始化失败。 (系统找不到指定的文件。
================================================ ======
更多信息,我在脚本中添加了几个 Wscript.Echo 语句,在第一行之前、FOR 循环之后和 "复制文件”命令。当我登录时,我看到 C:\debug.txt 中的所有输出。未登录时,我看到与上述相同的错误消息,即没有 Wscript.Echo 输出。这将表明当我未登录时它无法找到我的 vbs 文件。
============================
这里仍然没有快乐。我移动并修改了 .bat 文件以输出脚本文件的内容:
type H:\Task_Stuff\CopyWebCamFileTest.vbs > H:\Task_Stuff\debug2.txt
C:\windows\system32\cscript.exe H:\Task_Stuff\CopyWebCamFileTest.vbs > H:\Task_Stuff\debug.txt
和以前一样,当我登录时运行时,我会输出到两个 .txt 文件,而 debug2.txt 中没有任何内容,而我未登录时 debug.txt 中的通常消息。
我会调整防病毒设置,但我需要先询问一下。我们正在使用 Symantec SEP。
如何检查用户环境变量?
=====================
也许这会澄清我的问题或提出解决方案?
你能提供任何想法吗...RDK
【问题讨论】:
-
.vbs 脚本是否依赖于用户环境变量?如果是这样,当“用户未登录”时它可能不起作用。您是否完全限定了任务中 C:\windows\system32\cscript.exe 和 .vbs 脚本的路径?我见过错误的 %PATH% 和 %PATHEXT% 会导致此类问题的实例。 cscript.exe 或 wscript.exe 是否设置为 .vbs 文件扩展名的默认处理程序?您可以使用:ASSOC .vbs 进行检查。计划任务是否可以使用旧的缓存密码?编辑任务并按 [OK] 应该会提示您输入新密码。希望这里有帮助。
-
我将根据您的建议更新我的问题
-
您可以尝试将您的 .vbs 脚本移动到文件夹中吗?您可能会遇到防病毒安全软件或软件限制策略强制执行的限制(例如,当从驱动器 C 的根目录运行 .vbs 时:通过计划任务)。好奇:上次重启服务器是什么时候?只是为了确保有足够的内存和可用句柄。
-
根据您关于将脚本移动到文件夹的想法和其他一些想法,我更新了我的问题
-
我在您的脚本中看不到对用户环境变量的任何依赖,因此您可以忽略该注释。但是,驱动器 H: 和 D: 是本地驱动器吗?如果不是,请确保它们是对计划任务帐户始终可用的持久驱动器映射(在重新启动之间),并且不需要 netlogon 脚本来映射它们。
标签: vbscript scheduled-tasks windows-server-2003