【问题标题】:Get network information with WMI使用 WMI 获取网络信息
【发布时间】:2014-10-14 15:52:02
【问题描述】:

我必须在我的 Web 项目中创建一个资源监控仪表板(如任务管理器)。我正在使用 WMI。我可以从Win32_PerfFormattedData_Tcpip_NetworkInterface 获得CurrentBandwidth 和BytesTotalPersec,但它返回7 个项目(任务管理器在网络选项卡中仅显示4 个项目)。我发现有些项目被禁用了;我可以在Win32_NetworkAdapter 中找到使用NetEnabled 启用的那些,但是我怎样才能加入这两个呢?如何像任务管理器一样显示网络信息?

我想获取任务管理器显示的网络信息(例如AdapterName、Utilization(为此我必须获取带宽和总发送/接收字节/秒)、Speed 和状态)。我可以使用Win32_PerfFormattedData_Tcpip_NetworkInterface 来获得其中的一些,而其他人可以使用Win32_NetworkAdapter 来获得。例如,我可以使用“Win32_PerfFormattedData_Tcpip_NetworkInterface”的BytesTotalPersec 成员获取所有网络的发送/接收字节/秒,但这会检索所有网络的(包括禁用的)数据。如何获取仅启用网络的发送/接收字节/秒测量值?

【问题讨论】:

  • 请说明您的要求。你想加入什么?您无法访问哪些内容?
  • 我更新了我的问题

标签: c# asp.net wmi


【解决方案1】:

最好的方法是使用 WQL 查询。

http://msdn.microsoft.com/en-us/library/aa392902(v=vs.85).aspx

所以你的第一个查询将是这样的

"SELECT Name FROM Win32_NetworkAdapter WHERE NetEnabled = 'true'"

获得该列表后,您可以对该 IEnumerable 执行 for-each 并在每个列表上调用类似的查询:

"SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE Name = '" + adapter + "'"

但是,您可能会发现一些有趣的问题,例如名称并不总是完全匹配。在我的机器上,NetworkAdapterWMI 以“Intel(R)”作为名称的前缀,而 NetworkInterfacesWMI 以“Intel[R]”作为同名的前缀,因此您可能需要在两个查询之间进行一些转换。

希望这会让您朝着正确的方向开始。

【讨论】:

  • 这只是我的问题,我在这两个类之间找不到共同的独特属性。在从这两个类中检索到的其他项目中,它们是不等价的。 Win32_NetworkAdapter 返回 19 项,Win32_PerfFormattedData_Tcpip_NetworkInterface 返回 7 项。
  • 根据我的经验,并非所有 WMI 提供程序都同样有用和一致。通常,它们有您需要的东西,但通常您必须查看其他 WMI 类或深入研究这些领域。文档对此有所帮助:msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多