Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 获取WMIObject Win32_NetworkAdapterConfiguration-通过每个NIC的X个DNS服务器循环_Arrays_Powershell_Foreach_Get Wmiobject - Fatal编程技术网

Arrays 获取WMIObject Win32_NetworkAdapterConfiguration-通过每个NIC的X个DNS服务器循环

Arrays 获取WMIObject Win32_NetworkAdapterConfiguration-通过每个NIC的X个DNS服务器循环,arrays,powershell,foreach,get-wmiobject,Arrays,Powershell,Foreach,Get Wmiobject,对于一组计算机,我希望连接到每一台计算机,列举每个具有真实IP的NIC,对于每个NIC,我希望循环通过每个DNS服务器(第一、第二、第三、第四、第五等),如果它包含特定IP(例如8.8.8.8),我希望在不影响任何其他DNS服务器的情况下替换它(使用7.7.7)。如何对X个DNS服务器执行此操作,而无需每次执行一个服务器条目(就像我在下面对前3个条目所做的那样),同时对其进行更改 $computer ='wrk-01' $NICs = Get-WMIObject Win32_Networ

对于一组计算机,我希望连接到每一台计算机,列举每个具有真实IP的NIC,对于每个NIC,我希望循环通过每个DNS服务器(第一、第二、第三、第四、第五等),如果它包含特定IP(例如8.8.8.8),我希望在不影响任何其他DNS服务器的情况下替换它(使用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)
    }
}

非常感谢,非常好用!我忘记了脚本本身内部的管道:)。顺便说一句,最后一行实际上设置了DNS顺序,但是$null是用来做什么的呢?感谢您提供有关变量名的提示。$null只会吞下wmi输出以保持控制台干净。