winapi - 在纯IPv6机器中使用powershell设置Win32_NetworkAdapterConfiguration的 "SetDNSServerSearchOrder"方法

标签 winapi powershell wmi ipv6 network-protocols

SetDNSServerSearchOrder 返回 70,来自 MSDN 的信息是 SetDNSServerSearchOrder 的“无效 IP 地址”

当我尝试使用 IPv4 地址时,它成功添加了 DNS 服务器。但是当我尝试提供 IPv6 地址而不是 IPv4 地址时,它不起作用。

  1. 为什么无法设置 IPv6 地址?
  2. 在 IPv6 计算机中实现此目的的替代方法是什么?

下面是我尝试过的代码片段。还尝试将 IPAddress 和字符串数据类型作为 SetDNSServerSearchOrder 的输入。

PS C:\Users\Administrator> $NICs = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.IPEnabled -eq "TRUE" -and
 ($_.IPAddress -contains "1111:1111:1111:1111:1111:1111:1111:1114")}
PS C:\Users\Administrator> [System.Net.IPAddress]$IP="1111:1111:1111:1111:1111:1111:1111:1112"
PS C:\Users\Administrator> $IP


Address           :
AddressFamily     : InterNetworkV6
ScopeId           : 0
IsIPv6Multicast   : False
IsIPv6LinkLocal   : False
IsIPv6SiteLocal   : False
IPAddressToString : 1111:1111:1111:1111:1111:1111:1111:1112



PS C:\Users\Administrator> $NICs.SetDNSServerSearchOrder($IP)


__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 70



PS C:\Users\Administrator> [string]$IP="1111:1111:1111:1111:1111:1111:1111:1112"
PS C:\Users\Administrator> $NICs.SetDNSServerSearchOrder($IP)


__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ReturnValue      : 70



PS C:\Users\Administrator> $IP
1111:1111:1111:1111:1111:1111:1111:1112
PS C:\Users\Administrator> $NICs


DHCPEnabled      : True
IPAddress        : {fe80::24b7:d14e:fd15:bd2b, 1111:1111:1111:1111:1111:1111:1111:1114}
DefaultIPGateway :
DNSDomain        :
ServiceName      : e1cexpress
Description      : Intel(R) 82579LM Gigabit Network Connection
Index            : 10



PS C:\Users\Administrator>

下面是运行这些命令后的屏幕截图。

enter image description here

在Google上也搜索过,没有找到解决办法。 :-(

操作系统版本:windows server 2008 r2

Powershell版本:Powershell 2.0

解决方案应该是唯一的,以便我可以用于 IPv4 和 IPv6 系统。

如果有人能在这方面提供帮助,那就太好了。

最佳答案

  1. 不确定 - 在 Win2012 中,您可以通过使用专用 cmdlet 进行网络管理来回避整个问题

    Set-DnsClientServerAddress -InterfaceIndex $($Nics.InterfaceIndex) -ServerAddresses $IP
    
  2. 使用netsh

    $NICs = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.IPEnabled -eq "TRUE" -and
    ($_.IPAddress -contains "1111:1111:1111:1111:1111:1111:1111:1114")}
    $IP="1111:1111:1111:1111:1111:1111:1111:1112"
    netsh interface IPv6 set dnsservers name=$($Nics.InterfaceIndex) static $IP primary
    

这也可以适应 ipv4:

    if($IP.contains(":")){
        netsh interface IPv6 set dnsservers name=$($Nics.InterfaceIndex) static $IP primary
    }
    elseif($IP.contains(".")){
        netsh interface IPv4 set dnsservers name=$($Nics.InterfaceIndex) static $IP primary
    }
    else{
         Write-Host ("Invalid IP:" + $IP)
    }

关于winapi - 在纯IPv6机器中使用powershell设置Win32_NetworkAdapterConfiguration的 "SetDNSServerSearchOrder"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22072577/

相关文章:

winapi - GetAllTabInfo 用法?

windows - 背景颜色和控制台文本颜色

powershell - 在同一行和输出csv上使用Win32_Computersystem和Win32_service

c++ - 获取设备连接或删除通知

c++ - 如何确定知名组中用户的成员身份为 Everyone

powershell - 特定命令的自定义 PowerShell 选项卡完成?

python 2.7 : wmi module: Creating an interactive process on a remote system

powershell - 超时 Get-WMIObject cmdlet

c++ - Win32 C++ Alphablend 位图部分透明

TeamCity PowerShell Runner 无法识别 PowerShell 社区扩展