通过多行Powershell变量运行For循环



我有一个脚本的一部分,其中用户输入服务器名称列表,然后检查以确保它们存在于AD中,然后在每个存在的服务器上运行命令。这是我的文件:

$machineNames = (read-host "Enter Server Name(s) (space separated)").Trim()
foreach ($machineName in (($machineNames).Split(' '))) {
Try {
Get-ADComputer $machineName | Out-Null
$veriMachineNames += "$machineName`n"
}
Catch {
Write-Host "*****Invalid Machine Name:  $machineName" -Foreground Yellow
Write-Host "*****Skipping $machineName`n" -Foreground Yellow
}
}
foreach ($machine in $sepMachineNames) {
Write-Host "Server: $machine `n"
}

当我运行这部分脚本时,我得到以下输出(故意包含错误):

PS C:> C:script.ps1
Enter Machine Name(s) (space separated): server1 server2 server3
*****Invalid Machine Name:  server3
*****Skipping server3
Server: server1
server2

可以看到,第二个foreach似乎看到server1和server2在一行,而不是两行。有没有一种方法可以用一个变量来做到这一点?我宁愿不把列表输出到文件。

代替手动连接每个名称到一个多行字符串,输出个人名称1×1并将它们存储在一个变量中:

$veriMachines = foreach ($machineName in (($machineNames).Split(' '))) {
Try {
Get-ADComputer $machineName | Out-Null
# no piping to `|Out-Null`, this will "bubble up" to the variable
$machineName
}
Catch {
Write-Host "*****Invalid Machine Name:  $machineName" -Foreground Yellow
Write-Host "*****Skipping $machineName`n" -Foreground Yellow
}
}

现在$veriMachines是一个字符串数组(我们刚刚验证的机器名),您可以遍历:

foreach($machine in $veriMachines){
Write-Host "Server: $machine"
}

最新更新