Перейдите к следующему элементу в объекте ForEach
У меня есть PowerShell script, который выполняет некоторые проверки для всех админов домена в нескольких доменах.
Для каждой учетной записи пользователя выполняется несколько проверок. Когда один из них не работает, script должен перейти к следующему администратору в списке.
В настоящее время у меня есть что-то вроде этого (упрощенное):
Get-QADGroupMember "Domain Admins" | Select-Object SamAccountName | ForEach-Object {
#Do something
if(!ThisCheckIsOK)
{
break;
}
#Do something else
if(ThisCheckIsNotOK)
{
break;
}
...
}
Это останавливает весь script. Есть ли способ перейти к следующему элементу?
$foreach.movenext()
не работает, так как $foreach
есть null
.
Ответы
Ответ 1
Вы можете использовать оператор Continue
для продолжения самого внутреннего цикла.
Выдержка из PowerShell
файла справки:
В script оператор Continue
заставляет поток программы немедленно перемещаться к вершине самого внутреннего цикла, управляемого любым из этих утверждений:
Ответ 2
Вам просто нужно заменить break
инструкцией return
.
Вспомните код внутри Foreach-Object
как анонимную функцию. Если у вас есть петли внутри функции, просто используйте ключевые слова управления, применяемые к конструкции (continue
, break
,...).
Ответ 3
Я знаю, что это старый пост, но я хотел бы добавить кое-что, что я узнал для следующих людей, которые приземляются здесь во время поиска в Google.
В Powershell 5.1 вы хотите использовать continue
чтобы перейти к следующему элементу вашего цикла. Я протестировал 6 элементов в массиве, имел цикл foreach
, но поставил оператор if с:
foreach($i in $array){
write-host -fore green "hello $i"
if($i -like "something"){
write-host -fore red "$i is bad"
continue
write-host -fore red "should not see this"
}
}
Из 6 предметов 3-й был чем-то. Как и ожидалось, он прошел через первые 2, затем что-то совпадения дало мне красную линию, где $i
совпало, я увидел something is bad
а затем он перешел к следующему элементу в массиве, не говоря, should not see this
. Я тестировал с return
и он вообще вышел из цикла.