C# WMI:正在获取接口名称、状态网络

C# WMI:正在获取接口名称、状态网络,c#,networking,C#,Networking,你好 在netsh界面显示界面中有4个类别列 管理状态已启用 断开或连接的状态 专用类型 接口名称以太网2或Wi-Fi或以太网 问题1: 如何在State=Connected的位置获取接口名 ManagementClass mc = new ManagementClass("Win32_NetworkAdapter"); foreach (ManagementObject mo in mc.GetInstances()) { int index = Convert.ToInt32(mo[

你好

在netsh界面显示界面中有4个类别列

管理状态已启用

断开或连接的状态

专用类型

接口名称以太网2或Wi-Fi或以太网

问题1: 如何在State=Connected的位置获取接口名

ManagementClass mc = new ManagementClass("Win32_NetworkAdapter");
foreach (ManagementObject mo in mc.GetInstances())
{
    int index = Convert.ToInt32(mo["Index"]);
    string name = mo["NetConnectionID"] as string;
    if (!string.IsNullOrEmpty(name))
        MessageBox.Show(name);
        //textBox1.Text += name + Environment.NewLine;
}
我这里有一个图像,我想作为输出。

谢谢大家。

您可能需要按NetConnectionStatus==2进行筛选

网络连接状态

断开0 连接1 连接2 断开3 硬件不存在4 硬件禁用5 硬件故障6 媒体断开连接7 认证8 身份验证成功9 身份验证失败10 无效地址11 所需证件12 可用属性及其可能值的列表

var mc = new ManagementClass("Win32_NetworkAdapter");
mc.GetInstances()
    .OfType<ManagementObject>()
    .Where(mo => !string.IsNullOrEmpty(mo["NetConnectionID"] as string)) // has a ConnectionId
    .ToList()
    .ForEach(mo => Debug.WriteLine($"NetConnectionStatus = {mo["NetConnectionStatus"]} / NetConnectionID={mo["NetConnectionID"]} / Name={mo["Name"]}"));

//Result:
//  NetConnectionStatus=7 / NetConnectionID=Ethernet / Name=Intel(R) Ethernet Connection (5) I219-LM
//  NetConnectionStatus=7 / NetConnectionID=WiFi / Name=Intel(R) Dual Band Wireless-AC 8265
//  NetConnectionStatus=7 / NetConnectionID=Bluetooth Network Connection / Name=Bluetooth Device (Personal Area Network)
//  NetConnectionStatus=2 / NetConnectionID=VMware Network Adapter VMnet1 / Name=VMware Virtual Ethernet Adapter for VMnet1
//  NetConnectionStatus=2 / NetConnectionID=VMware Network Adapter VMnet8 / Name=VMware Virtual Ethernet Adapter for VMnet8