我正在使用 WMI 监控 Windows Server 2003 和 Windows Server 2008 主机。我得到了我想要的所有信息,但缺少磁盘 I/O 性能。
我尝试查询“Win32_PerfFormattedData_PerfDisk_LogicalDisk”中的“AvgDiskQueueLength”,但总是得到“无键”的结果。
WMI 服务在两个系统上都在运行,我可以使用 wbemtest 连接到它而不会出现任何错误。
我是否遗漏了什么或者做错了什么?
答案1
AvgDiskQueueLength 是 Win32_PerfFormattedData_PerfDisk_LogicalDisk 类的一个属性。除非“无键”结果确实很奇怪,否则听起来你可能试图错误地访问它。它应该是简单的属性表示法,例如
win32perf.AvgDiskQueueLength
下面的代码应该可以工作。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colDisks = objRefresher.AddEnum _
(objWMIService, "win32_perfformatteddata_perfdisk_physicaldisk"). _
objectSet
objRefresher.Refresh
For Each objDisk in colDisks
Wscript.Echo "Average Disk Queue Length: " & vbTab & _
objDisk.AvgDiskQueueLength
Next
实际上,只有当您要进行多次调用时才需要复习部分。这样可以避免一遍又一遍地执行 GetObject 代码。
不过,您可能想稍微研究一下平均磁盘队列长度。我记得收集或报告它的方式有些奇怪。我可能错了,但我想提一下。