Я изменил ваш пример кода следующим образом:
$nodes_table = "a","b","c"
$nodes_list = "a","b","c"
:Outer foreach ($item in $nodes_table)
{
foreach($node in $nodes_list)
{
Write-Output "item = $item, node = $node" # display values being compared
if($node -eq $item)
{
Write-Output "$node hostname matches in vTM"
break :Outer
}
}
}
Это дает следующий вывод:
item = a, node = a
a hostname matches in vTM
item = b, node = a
item = b, node = b
b hostname matches in vTM
item = c, node = a
item = c, node = b
item = c, node = c
c hostname matches in vTM
Мне кажется, что он ведет себя правильно.
EDIT
Как указано в ответе Брюса Пайетта ниже, в исходном коде есть дефект, который я скопировал в мой пример выше. Оператор break :Outer
неверен, поскольку объектом разрыва должно быть либо ничто, либо имя метки. Символ двоеточия (:) не должен быть там. PowerShell игнорирует эту ошибку и ведет себя так, как будто в операторе break
нет метки, тем самым нарушая внутренний цикл, а не внешний цикл. Удалив двоеточие, которое делает строку break Outer
, вы увидите, что код сразу переходит к концу внешнего цикла for
во время первой итерации внешнего цикла и первой итерации внутреннего цикла.