有没有办法在 C# 中获取 disabled/enabled 网络接口的列表

Is there a way to get a list of disabled/enabled network interfaces in C#

我正在编写一个小脚本来更改特定 Wireless80211 或以太网网络接口的 IPv4 地址。到目前为止一切正常。该脚本使用命令提示符和 netsh 设置 IPv4(为了使用 C# 控制它,我使用 System.Diagnostics)。 我想添加功能,该脚本禁用或启用所有 Wireless80211 和以太网网络接口(没有特定接口),您可以在 "Control Panel>Network and Internet>Network Connections".

中找到它们

该脚本主要用于ArtNet到DMX自动准备使用ArtNet的一切(对于那些对控制面板一无所知的人和自动化工作流程)。 我已经用 System.Net.NetworkInformation 命名空间试过了,但我只找到了一种方法来获得启用的网络接口。一旦我禁用一个界面 System.Net.NetworkInformation 就不会显示这个界面。

NetworkInterface.GetAllNetworkInterfaces()

然后检查 OperationalStatus 属性

https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.networkinterface?view=netframework-4.7.2

我不知道 NetworkInterface.GetAllNetworkInterfaces() 没有 return 禁用接口。

无论如何,您可以尝试通过 .NET 框架中可用的 System.Management.dll 使用 WMI api(您必须将此引用添加到您的项目),我做了一个测试,它允许您甚至与禁用的网络接口进行交互。

以下示例让您了解如何通过此 api 使用 WMI,我几乎从文档中提取了它:

using System;
using System.Management;
...
void ListNetworkAdapters()
{
    var query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter");

    using (var searcher = new ManagementObjectSearcher(query))
    {
        var queryCollection = searcher.Get();

        foreach (var m in queryCollection)
        {
            Console.WriteLine("ServiceName : {0}", m["Name"]);
            Console.WriteLine("MACAddress : {0}", m["Description"]);
            Console.WriteLine();
        }

        Console.ReadLine();
    }
}

可在此处找到文档: https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-networkadapter