2016-06-16 3 views
0

Я использую этот скрипт, чтобы установить мой DNS и переключаться между DNS-серверами:Настройка DNS-сервера для нескольких сетей сразу с помощью PowerShell?

$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) 
    } 
} 

Теперь этот скрипт работает отлично, если я подключен к одной сети. Если я подключен к нескольким сети, это бросает ошибку:

"Method Invocation failed because [system.object[]] doesnt contain a method names 'setDNSsearchorder'".

Теперь, если это работает для одной сети, а также для двух сетей я зацикливание их, почему это не работает?

ответ

0

Вы прокручиваете сетевые карты с помощью foreach($n in $nic), но затем вы используете методы на $nic. Вам нужно запустить методы на $n, потому что, когда есть несколько сетевых адаптеров, $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 будет тип объекта, который поддерживает метод вместо массива этих объектов, поэтому она работает, когда есть только один сетевой адаптер.

+0

Такой позор. :(Базовая ошибка кодирования. Чем ближе я смотрел, тем меньше я видел. :( –

Смежные вопросы