我正在尝试监视远程 Windows 机器上的接口带宽。到目前为止,我使用了带有Cisco 带宽公式的 SNMP,但这需要在两个不同的时间检索两个样本。最后但并非最不重要的一点是,我用 SNMP 记录的值似乎是完全错误的。因为我有 WMI 支持,所以我想使用它,但我发现的唯一值(这似乎是我正在寻找的)是Win32_PerfRawData_Tcpip_NetworkInterface的BytesTotalPerSec。然而,该值看起来更像是一个总计数器(就像 SNMP 一样)。有没有办法通过 WMI 检索即时当前带宽?澄清当前带宽字段总是返回 1000000000(这是最大带宽),你可以想象它没有帮助。
问问题
2957 次
1 回答
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
如果您想深入研究在更长的采样间隔内收集更多的统计信息
约翰
于 2012-02-11T11:12:53.417 回答