我正在尝试监控远程Windows机器上的接口带宽。到目前为止,我使用了Cisco Bandwidth Formula的SNMP,但这需要在两个不同的时间检索两个样本。最后但并非最不重要的是,似乎我用SNMP记录的值是非常错误的。由于我有WMI支持,我想使用它,但我发现的唯一值(似乎是我正在寻找的)是Win32_PerfRawData_Tcpip_NetworkInterface的 BytesTotalPerSec 。然而,该值看起来更像是一个总计数器(就像SNMP计数器一样)。有没有办法通过WMI检索istant当前带宽?澄清当前带宽字段总是返回1000000000(最大带宽),你可以想象它没有帮助。
答案 0 :(得分:4)
性能计数器数据在2个位置公开,Win32_PerfRawData *和Win32_PerfFormattedData *。前者包含原始数据,后者包含派生统计数据,是您所追求的。
您通常在perfmon(例如)中看到的是Win32_PerfFormattedData *数据。
试试这个:
Set objWMI = GetObject("winmgmts://./root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objInterfaces = objRefresher.AddEnum(objWMI, _
"Win32_PerfFormattedData_Tcpip_NetworkInterface").ObjectSet
While (True)
objRefresher.Refresh
For each RefreshItem in objRefresher
For each objInstance in RefreshItem.ObjectSet
WScript.Echo objInstance.Name & ";" _
& objInstance.BytesReceivedPersec & ";" _
& objInstance.BytesSentPersec
Next
Next
Wscript.Echo
Wscript.Sleep 1000
Wend
根据经验,除非您每秒收集一次指标,否则对某一秒进行测量是没有用的。
如果您想获得精确的带宽,您可以通过获取2个样本从原始数据中自行获取(无论如何您必须在Windows 2000上执行此操作)
如果更有意义,请参阅此处的Windows 2000部分。
这里有一篇很棒的文章Make your own Formatted Performance Data Provider
如果您想深入研究在更长的采样间隔内收集更多统计信息
约翰