Перейти к следующему пункту в ForEach-Object - PullRequest
25 голосов
/ 07 декабря 2011

У меня есть сценарий PowerShell, который выполняет некоторые проверки всех администраторов домена в нескольких доменах. Для каждой учетной записи пользователя проводится ряд проверок. В случае сбоя одного из них скрипт должен перейти к следующему администратору в списке.

У меня сейчас что-то вроде этого (упрощенно):

Get-QADGroupMember "Domain Admins" | Select-Object SamAccountName | ForEach-Object {

    #Do something
    if(!ThisCheckIsOK)
    {
        break;
    }

    #Do something else
    if(ThisCheckIsNotOK)
    {
        break;
    }

    ...
}

Это останавливает весь сценарий. Есть ли способ перейти к следующему элементу?

$foreach.movenext() не работает, поскольку $foreach равно null.

Ответы [ 3 ]

33 голосов
/ 07 декабря 2011

Вы можете использовать оператор Continue для продолжения самого внутреннего цикла.

Выдержка из PowerShell файла справки:

В сценарии continue оператор заставляет поток программы немедленно перемещаться к вершине самого внутреннего цикла, управляемого любым из следующих операторов:

  • for
  • foreach
  • while
31 голосов
/ 07 декабря 2011

Вам просто нужно заменить break на оператор return.

Думайте о коде внутри Foreach-Object как о анонимной функции.Если внутри функции есть циклы, просто используйте управляющие ключевые слова, применяемые к конструкции (continue, break, ...).

0 голосов
/ 15 января 2019

Я знаю, что это старый пост, но я хотел добавить кое-что, что я узнал для следующих людей, которые приземляются здесь во время поиска в 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, и он вообще вышел из цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...