2014-09-25 74 views
0

我收到了以下脚本来更新Windows服务器上的DNS服务器。该脚本适用于更新一台服务器。我想让这个脚本处理一个带有服务器列表的文本文件,以一次性批量更新多个服务器。我想是这样的:Powershell脚本更新多台服务器上的DNS

script.ps1 -ComputerName(获取内容C:\ serverlist.txt)-OldDns 10.0.0.1 -NewDns 10.0.0.2

如果有在多个服务器'这失败serverlist.txt”。我的问题是如何将一个foreach,它允许每个服务器在“serverlist.txt”

[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) 
    } 
    } 
} 

回答

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 
} 
相关问题