arrays - Get-WMIObject Win32_NetworkAdapterConfiguration - 循环通过每个 NIC 的 X 个 DNS 服务器
问题描述
对于一组计算机,我想连接到每台计算机,枚举每个具有真实 IP 的 NIC,并且对于每个 NIC,我想循环通过每个 DNS 服务器(第一、第二、第三、第四、第五等),如果它包含特定 IP(例如 8.8.8.8) 我想替换它(使用 7.7.7.7)而不影响任何其他 DNS 服务器。我如何为 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)
}
}
推荐阅读
- mysql - 如何返回第二个表中不存在或存在“空”值的所有内容
- macos - Openpose 错误“zsh: abort ./build/examples/openpose/openpose.bin --image_dir examples/media/”
- azure-hdinsight - 在 HDInsight 中从 SSH 连接到辅助头节点
- flutter - 从 StateFull 小部件调用 void 函数
- flutter - 如何提升脚手架的主体以从 appBar 开始但不被 appbar 遮蔽
- python - Python,while循环与simpledialog中的其他按钮冲突
- c# - 在 using(dbContext) 块内调用 Task.Delay
- excel - 过滤无格式的电子邮件信息
- reactjs - 页面上的对话框导致在 chrome 扩展中禁用文本框/选择
- python-3.x - 从 Makefile 错误 python3 不是目录运行 python 脚本