获取WMIObject Win32_NetworkAdapterConfiguration-循环通过每个NIC的X个DN



对于一组计算机,我想连接到每台计算机,枚举每个具有真实IP的NIC,对于每个NIC,我想循环通过每个DNS服务器(第一、第二、第三、第四、第五等(,如果它包含特定的IP(如8.8.8.8(,我想在不影响任何其他DNS服务器的情况下替换它(用7.7.7.7(。我如何为X个DNS服务器做这件事,而不每次做一个服务器条目(就像我在下面为前3个所做的那样(,并同时更改它。

$computer ='wrk-01'
$NICs     = Get-WMIObject Win32_NetworkAdapterConfiguration -computername $computer | 
where{$_.IPEnabled -eq "TRUE"}
Foreach($NIC in $NICs) {
#  $DNSServerCount = $Nic.DNSServerSearchOrder.Count
#  $DNSServerArray = @($nic.DNSServerSearchOrder[$DNSServerCount - $DNSServerCount,$DNSServerCount - $DNSServerCount + 1,$DNSServerCount - $DNSServerCount + 2])
# write-host $nic.description
#   write-host $nic.PSComputerName $DNSServerArray
if($nic.dnsserversearchorder[0] -like "8.8.8.8"){   
write-host "matched 8.8.8.8 at position 0"
$NIC.SetDNSServerSearchOrder(@("7.7.7.7", $nic.dnsserversearchorder[1], $nic.dnsserversearchorder[2]))
}
if($nic.dnsserversearchorder[1] -like "8.8.8.8"){   
write-host "matched 8.8.8.8 at position 1"
$NIC.SetDNSServerSearchOrder(@($nic.dnsserversearchorder[0],"7.7.7.7", $nic.dnsserversearchorder[2]))
}
if($nic.dnsserversearchorder[2] -like "8.8.8.8"){   
write-host "matched 8.8.8.8 at position 2"
$NIC.SetDNSServerSearchOrder(@($nic.dnsserversearchorder[0], $nic.dnsserversearchorder[1],"7.7.7.7"))
}
}

这里有一种检查和更新是否匹配的方法。一旦找到匹配,它将用所需的替换替换替换任何匹配的行。否则输出,收集的列表将被设置为新的DNS服务器。如果没有匹配,它将继续到下一个nic。

$computer ='wrk-01'
$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration -computername $computer | 
where{$_.IPEnabled -eq "TRUE"}
Foreach($NIC in $NICs)
{
$DNSIPs = $nics.DNSServerSearchOrder
if($DNSIPs -contains '8.8.8.8')
{
Write-Host "Match found... updating" -ForegroundColor Green
$NewDNS = $DNSIPs | foreach {
$_ -replace '8.8.8.8','7.7.7.7'
}
$null = $NICs.SetDNSServerSearchOrder($NewDNS)
}
}

一个可能会让你头疼的建议是不要使用复数变量名,而是使用这样的描述性名称。

$computer ='wrk-01'
$NICList = Get-WMIObject Win32_NetworkAdapterConfiguration -computername $computer | 
where{$_.IPEnabled -eq "TRUE"}
Foreach($NIC in $NICList)
{
$DNSIPList = $nics.DNSServerSearchOrder
if($DNSIPList -contains '8.8.8.8')
{
Write-Host "Match found... updating" -ForegroundColor Green
$NewDNS = $DNSIPList | foreach {
$_ -replace '8.8.8.8','7.7.7.7'
}
$null = $NICs.SetDNSServerSearchOrder($NewDNS)
}
}

最新更新