如果我尝试过之前发布的有关此问题的大量可能的解决方案,我就不会发布此帖子了。
我开发了一个软件,它使用.vbs文件(导出器)从另一个软件执行 .exe(记者程序) 安装在客户端机器上。
用例场景
运行导出器手动操作(右键单击并打开)运行完美,完全符合预期。当我以自己的 Windows 用户身份通过任务计划程序在自己的机器上运行时,它运行完美,完全符合预期。
在客户端 Windows Server 2008/2012 机器上手动运行时,它运行完美,完全符合预期。当以任何用户(不包括管理员组)身份通过任务计划程序运行时,任务计划程序报告为 0x0,但是记者程序未按预期生成文件。
当在客户端 Windows Server 2008/2012 框上通过以用户身份运行的任务计划程序运行时管理员,它可以运行,但是在一夜之间(当我们的任务设置为运行时),它却无法运行。
计划任务设置 - 常规
计划任务设置 - 操作
脚本
在上述场景中,导出器由于脚本的其他部分正在运行(脚本的其他部分清空了目标 XML 文件),因此脚本的这个阶段似乎出现故障。
Function Export(filepath, report)
dim fso
set fso_tidy = CreateObject("Scripting.FileSystemObject")
if fso_tidy.FileExists(filepath)=true then
set fso_tidy = nothing
set oShell = CreateObject("WScript.Shell")
oShell.Run """"&simsdir&"\CommandReporter.exe"" /QUIET /user="""&simsu&""" /password="""&simsp&""" /REPORT:"""&report&" v"&rptv&""" /OUTPUT:"""&filepath&"""", 0, true
set oShell = nothing
set fso_tidy = CreateObject("Scripting.FileSystemObject")
set objFile = fso_tidy.GetFile(filepath)
if objFile.size > 64 then
size = round(objFile.size / 1024, 1)
WriteToLog "DATA", "(OK) "&report&" EXPORTED (size: "&size&"kb)"
else
WriteToLog "DATA", "(FAILED) "&report&" EXPORTED (size: "&size&"kb)"
end if
set objFile = nothing
end if
set fso_tidy = nothing
end Function
该函数被调用 5 次,对于每个需要从软件中导出数据的报告调用一次。
已经尝试过的方法
- 我的软件文件夹的完全用户权限
- 尝试以每个用户身份运行,无论是客户端服务器上的本地用户还是域用户
- 尝试使用 cscript.exe 运行 vbs
如果 vbs 需要操作文件等,我是否遗漏了有关如何从任务计划程序运行 vbs 的信息
答案1
您已将任务设置为在本地系统帐户上下文中运行。系统帐户不是成熟的交互式用户,因此并非所有任务都会在该上下文中运行。在使用它执行任务时,您必须牢记以下注意事项:
- 本地系统向网络提供您的计算机帐户凭据(即
COMPUTERNAME$
),因此如果filepath
位于网络共享上,则本地计算机帐户必须对它具有特定的权限(或 Everyone 组)。 - 本地系统没有用户配置文件(技术上来说有,但里面什么都没有)。任何引用每个用户注册表设置或文件系统位置的操作都可能会失败。
- 以本地系统运行的进程无法与用户交互,因此如果您的脚本弹出对话框,用户将看不到它。
尝试以真正的本地或域帐户而不是系统帐户运行您的任务。当然,您需要将密码嵌入到任务中才能使其正常工作。