У меня есть следующий код:Как выйти из ForEach-Object в PowerShell
$project.PropertyGroup | Foreach {
if($_.GetAttribute('Condition').Trim() -eq $propertyGroupConditionName.Trim()) {
$a = $project.RemoveChild($_);
Write-Host $_.GetAttribute('Condition')"has been removed.";
}
};
Вопрос № 1: Как выйти из ForEach? Я пробовал использовать «break» и «continue», но это не сработало.
Вопрос №2: Я обнаружил, что могу изменить список в цикле foreach
... Мы не можем сделать это как на C# ... Почему PowerShell позволяет нам это делать?
Я думаю, вы хотели добавить в ваш цикл строку типа $ a = 1..23; ', чтобы показать, что изменения не отражены в исполнении промежуточного цикла. – ruffin
Пункт № 2 неверен (по крайней мере, с v5 с массивом фиксированного размера). Вы можете изменить массив и увидеть его внутри конструкции 'ForEach'. Если бы вы добавили '$ a [1] = 9' в конструкцию' ForEach', он отобразит 9 как 2-й элемент, но вы не сможете добавлять/удалять элементы из массива и все, что вы добавляете, используя '+ = 'оператор не будет отображаться до конца. Если не массив фиксированного размера (т. Е. '$ A = [System.Collections.ArrayList] @ (1,2,3)'), то любая попытка изменить содержимое вызовет изменение коллекции; операция перечисления может не выполняться. Ошибка, завершающая цикл. – Adrian
Это совершенно неверный ответ. Вопрос в том, что касается «Foreach-Object». В powershell (главным образом раздражающий gotcha btw) 'foreach' является« оператором »и« псевдонимом ». 'foreach', предоставленный в этом ответе плавкой, является« оператором », а не« псевдонимом ». См. [Здесь.] (Https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/08/getting-to-know-foreach-and-foreach-object/) Примечание: этот ответ представляет собой полный рефакторинг кода и может не работать во многих ситуациях. –