使用PowerShell一次为多个网络设置DNS服务器?

时间:2016-06-16 15:23:12

标签: powershell

我正在使用此脚本设置DNS并在DNS服务器之间切换:

$nic = get-wmiobject win32_networkadapterconfiguration | where {$_.IPEnabled -eq $true -and $_.DHCPEnabled -eq $true}

foreach($n in $nic){

    if($nic.DNSserverSearchOrder -eq "172.xxxxxxxx")
    {
        $servers = "8.8.8.8","8.8.4.4"
        $nic.SetDNSServerSearchOrder($servers)
    }
    else
    {
        $servers = "172.xxxxxxxx","172.xxxxxxxx"
        $nic.SetDNSServerSearchorder($servers)
    }
}

现在,如果我连接到一个网络,此脚本可以正常工作。如果我连接到多个网络,则会抛出错误:

  

“方法调用失败,因为[system.object []]不包含方法名称'setDNSsearchorder'”。

现在,如果这适用于一个网络,而对于两个网络,我正在循环它们,为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

您正在使用foreach($n in $nic)循环访问NIC,但是您正在$nic上运行方法。您需要在$n上运行方法,因为当有多个NIC时,$nic将是一个数组([system.object []])。

foreach($n in $nic){
    if($n.DNSserverSearchOrder -eq "172.xxxxxxxx")
    {
        $servers = "8.8.8.8","8.8.4.4"
        $n.SetDNSServerSearchOrder($servers)
    }
    else
    {
        $servers = "172.xxxxxxxx","172.xxxxxxxx"
        $n.SetDNSServerSearchorder($servers)
    }
}

如果只有一个网卡,$nic将是支持该方法的对象类型而不是这些对象的数组,这就是为什么只有一个网卡就可以工作的原因。