我正在使用此脚本设置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'”。
现在,如果这适用于一个网络,而对于两个网络,我正在循环它们,为什么这不起作用?
答案 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
将是支持该方法的对象类型而不是这些对象的数组,这就是为什么只有一个网卡就可以工作的原因。