我收到以下脚本来更新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)
}
}
}
答案 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
}