我对在 Windows 2003 Server 上运行的一些 VBScripts 有一个有趣/烦人的问题(它们在 XP 上运行良好)。
这些脚本基本上会定期调用 WMI 对象以提取性能信息并将其写入日志文件。它由每天早上 12:05 的计划任务启动并运行到午夜(或者如果它没有继续崩溃)。它归管理员所有,任务是"cscript xx.vbs blah blah blah"
.
有时它会运行几个小时,有时只运行几分钟。调用的形式为:
set objWMI = getObject("winmgmts:\\.\root\cimv2")
: : :
do lots of times:
set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
它返回的错误是一个对话框,指出远程过程调用未能执行,但没有额外信息(它确实给出了一个 32 位十六进制数字,下次发生时我会用它更新这个问题,但我的谷歌搜索出现了非常通用的页面,所以我不确定代码是否会有所帮助)。
它也曾经在以下行中崩溃(同样的错误),但我没有看到这个问题,因为我将它更改为使用 Win32_Perf Raw Data_PerfOS_Memory。
set colMem = wmi.execQuery("select AvailableKBytes" & _
" from Win32_PerfFormattedData_PerfOS_Memory",,48)
我认为它与网络无关,因为它在同一台机器上。
我还尝试将 objWMI 设置为空,并在每次循环中执行另一个 getObject ,但这没有帮助。
另一个可能的问题是,它实际上是在 VMWare Workstation 中运行的(但 XP 也是如此)——下周我将运行 Win2k3 的物理 PC 设置来测试它。
奇怪的是,它有时会运行几个小时而没有问题,收集数据并将其发送到日志文件。其他时候,它会在十分钟内崩溃。
我们中间的 Windows 专家有什么想法吗?
更新:
好吧,终于又失败了。这是我在屏幕截图上的一点努力:
+-------------------------------------------------+
| Windows Script Host |X|
+-------------------------------------------------+
| / Script: C:\Program Files\blah\blah.vbs |
| /\ Line: 271 |
| Char: 2 |
| Error: The remote procedure call |
| failed and did not execute. |
| Code: 800706BF |
| Source: SWbemServicesEx |
+-------------------------------------------------+
第 271 行是:
set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")
之前wmi
已设置为:
set wmi = getObject("winmgmts:\\.\root\cimv2")
(这个在循环中不断被重新创建,所以我认为 RPC 连接过时不是问题)。