C# 利用Powershell获取网络相关信息

利用Get-NetAdapter获取信息

Get-NetAdapter

 参考链接:https://docs.microsoft.com/en-us/powershell/module/netadapter/get-netadapter?view=winserver2012r2-ps

显示的属性如下(表格形式):

根据文档描述,我们可以根据Name或者InterfaceDescription过滤出想要的那个适配器。

using (PowerShell powerShellInstance = PowerShell.Create())
{
    powerShellInstance.AddCommand("Get-NetAdapter");

    Collection<PSObject> psOutput = powerShellInstance.Invoke();

    foreach (PSObject result in psOutput)
    {
        if (result.Members["InterfaceDescription"].Value?.ToString().ToUpper()?.Contains(adapterDescript.ToUpper()) ?? false)
        {
            mac = result.Members["PermanentAddress"].Value?.ToString();break;
        }
    }

    return mac;
}

补充:

Members中的"PermanentAddress"可以在Powershell源码GetComputerInfoCommand.cs查询到。

另外,返回的mac地址并没有格式,需要自己转换

还有个牛逼之处就是,禁用的网卡也能拿取信息?!

 

利用Get-NetIPAddress获取信息

Get-NetIPAddress

参考链接:https://docs.microsoft.com/en-us/powershell/module/nettcpip/Get-NetIPAddress?view=winserver2012r2-ps

显示的属性如下:

一般我们可以使用组合的指令

Get-NetIPAddress -InterfaceAlias "以太网 6" -AddressFamily IPv4

比如这个,就是过滤名字叫“以太网 6”,看IP是IPv4的内容。使用组合形式的代码是这样的:

using (PowerShell powerShellInstance = PowerShell.Create())
{
    powerShellInstance.AddCommand("Get-NetIPAddress");
    powerShellInstance.AddParameter("InterfaceAlias", name);
    powerShellInstance.AddParameter("AddressFamily", "IPv4");

    Collection<PSObject> psOutput = powerShellInstance.Invoke();

    foreach (PSObject result in psOutput)
    {
        ipAddress = result.Members["IPAddress"].Value.ToString();
    }

    return ipAddress;
}

 

posted @ 2019-01-21 15:34  樱花落舞  阅读(577)  评论(2编辑  收藏  举报