用于在多个服务器上更新DNS的Powershell脚本

时间:2014-09-25 16:59:33

标签: powershell dns

我收到以下脚本来更新Windows服务器上的DNS服务器。此脚本非常适合更新一台服务器。我想让这个脚本处理一个带有服务器列表的文本文件,以便一次批量更新多个服务器。我想的是:

script.ps1 -ComputerName(Get-Content c:\ serverlist.txt)-OldDns 10.0.0.1 -NewDns 10.0.0.2

如果' serverlist.txt'中有多个服务器,则会失败。我的问题是如何合并一个允许服务器列表中的每个服务器的ForEach'

    [CmdletBinding()]
    Param(
    [Parameter(Mandatory=$True,HelpMessage="Name of the computer to update")]
    [String]$ComputerName,

    [Parameter(Mandatory=$True,HelpMessage="DNS server to replace")]
    [String]$OldDns,

    [Parameter(Mandatory=$True,HelpMessage="New DNS server setting")]
    [String]$NewDns,

    [switch]$TestMode

    )

    $niclist = Get-WmiObject -Authentication PacketIntegrity -ComputerName $ComputerName -class           Win32_NetworkAdapterConfiguration | where { $_.DnsServerSearchOrder -contains $OldDns }

if ($niclist) {
  foreach ($nic in $niclist) {
    $dns = $nic.DnsServerSearchOrder
    $dns

    $index = [array]::IndexOf($dns,$OldDns)
    $dns[$index] = $NewDns

    $dns

    $nic
    if (!$TestMode) {
      $nic.SetDnsServerSearchOrder($dns)
    } 
  }
}

1 个答案:

答案 0 :(得分:0)

假设您的serverlist.txt包含一个服务器列表,其中每个服务器都在一行而没有标头,您只需将文件内容传送到ForEach-Object循环即可。 -ComputerName将是$_,它是管道中的当前项目。

Get-Content c:\serverlist.txt | ForEach-Object{
    script.ps1 -ComputerName $_ -OldDns 10.0.0.1 -NewDns 10.0.0.2
}