我正在尝试监视远程Windows计算机上的接口带宽。到目前为止,我将SNMP与Cisco Bandwidth Formula一起使用,但这需要在两个不同的时间检索两个样本。最后但并非最不重要的一点是,我使用SNMP记录的值似乎很错误。因为我有WMI支持,所以我想使用它,但是我发现的唯一值(似乎就是我要找的值)是Win32_PerfRawData_Tcpip_NetworkInterface的BytesTotalPerSec。但是,该值看起来更像一个总计数器(就像SNMP一样)。有没有一种方法可以通过WMI检索当前的带宽?为了阐明“当前带宽”字段,始终返回1000000000(其中“最大带宽”为最大),您可以想象这没有帮助。

最佳答案

性能计数器数据在两个位置公开,即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/

10-12 18:17