通过 wmi 监控磁盘 i/o

通过 wmi 监控磁盘 i/o

我正在使用 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 代码。

不过,您可能想稍微研究一下平均磁盘队列长度。我记得收集或报告它的方式有些奇怪。我可能错了,但我想提一下。

相关内容