我不明白为什么它循环不好。
$a = @("server1", "server2", "server3")
$b = @(121, 453, 565)
foreach ($element in $a) {
foreach ($element2 in $b) {
Write-Host $element " load is: " $element2
}
}
输出:
server1 load is: 121
server1 load is: 453
server1 load is: 565
server2 load is: 121
server2 load is: 453
server2 load is: 565
server3 load is: 121
server3 load is: 453
server3 load is: 565
我期待以下输出:
server1 load is: 121
server2 load is: 453
server3 load is: 565
我不明白我该如何解决它。 谢谢!
答案 0 :(得分:2)
你在foreach循环中有一个foreach循环,因此你得到3 * 3 = 9行。
执行所需操作的正确方法是按索引引用数组。
$a = @("server1", "server2", "server3")
$b = @(121, 453, 565)
for ($i=0; $i -lt $a.length; $i++)
{
write-host $a[$i] load is: $b[$i]
}
答案 1 :(得分:0)
你有一个3元素循环嵌套在3元素循环中,因此为什么你得到9个结果。你想要做的是同时逐步完成两个数组。
$a = @("server1", "server2", "server3")
$b = @(121, 453, 565)
for($index = 0; $index -lt $a.Count;$index++){
Write-Host "$($a[$index]): $($b[$index])"
}
或
0..($a.Count - 1) | Foreach-Object{
Write-Host $a[$_]: $b[$_]
}
这两个解决方案都假设$a
和$b
具有相同数量的元素。默认情况下,请求不存在不是PowerShell中的错误。将返回$null
。
对于你如何处理这些,你最好使用哈希表。这将更好地构建并消除一些潜在的失败点。然后,您可以在一个循环中迭代每个键值对
$a = @{
"server1"= 121
"server2"= 453
"server3"= 565
}
$a.GetEnumerator() | ForEach-Object{
Write-Host $_.Key": " $_.value
}
答案 2 :(得分:0)
其他解决方案:
$a = @("server1", "server2", "server3")
$b = @(121, 453, 565)
$i=0;
$a | %{"{0} load is: {1}" -f $_, $b[$i++]}