gpt4 book ai didi

c# - 使用 WMI 监视远程计算机上的带宽

转载 作者:太空宇宙 更新时间:2023-11-03 22:03:45 25 4
gpt4 key购买 nike

我正在尝试监控远程 Windows 机器上的接口(interface)带宽。到目前为止,我将 SNMP 与 Cisco Bandwidth Formula 一起使用但这需要在两个不同的时间检索两个样本。最后但同样重要的是,我用 SNMP 记录的值似乎是完全错误的。因为我有 WMI 支持,所以我想使用它,但我发现的唯一值(这似乎是我正在寻找的)是 Win32_PerfRawData_Tcpip_NetworkInterfaceBytesTotalPerSec .然而,该值看起来更像是一个总计数器(就像 SNMP 一样)。有没有办法通过 WMI 检索即时当前带宽?澄清当前带宽字段始终返回 1000000000(这是最大带宽),正如您所想象的那样,它没有帮助。

最佳答案

性能计数器数据暴露在 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 部分。

Derived stats on Windows 2000

这里有一篇很棒的文章 Make your own Formatted Performance Data Provider

如果您想在更长的采样间隔内深入收集更多的统计信息

约翰

关于c# - 使用 WMI 监视远程计算机上的带宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9190437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com