Подтвердить что ты не робот

Перейдите к следующему элементу в объекте 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.

4b9b3361

Ответ 1

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

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

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

  • for
  • foreach
  • while

Ответ 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 и он вообще вышел из цикла.