使用WMI获取网络信息

时间:2014-10-14 15:52:03

标签: c# asp.net wmi

我必须在我的Web项目中创建资源监视仪表板(如任务管理器)。我正在使用WMI。我可以从CurrentBandwidth获取BytesTotalPersecWin32_PerfFormattedData_Tcpip_NetworkInterface,但它会返回7个项目(任务管理器在“网络”标签中只显示4个项目)。我发现有些物品被禁用了;我可以使用NetEnabled中的Win32_NetworkAdapter查找哪些内容已启用,但我如何加入这两个?如何像任务管理器一样显示网络信息?

我想获取任务管理器显示的网络信息(例如AdapterNameUtilization(为此我必须获得带宽和总发送/接收字节数/秒),Speed,和州)。我可以使用Win32_PerfFormattedData_Tcpip_NetworkInterface和其他人使用Win32_NetworkAdapter来获得部分内容。例如,我可以使用{Win32_PerfFormattedData_Tcpip_NetworkInterface'的BytesTotalPersec成员获取所有网络的发送/接收字节数/秒,但这将检索所有网络(包括已禁用)数据。如何仅为启用的网络获取发送/接收字节/秒测量值?

1 个答案:

答案 0 :(得分: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]"所以你可能需要在两个查询之间进行一些转换。

希望这会让你开始朝着正确的方向前进。