转到ForEach-Object中的下一个项目

时间:2011-12-07 09:30:49

标签: powershell

我有一个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 个答案:

答案 0 :(得分:31)

您可能希望使用Continue语句继续最内层循环。

摘自PowerShell帮助文件:

  

在脚本中,continue语句会导致程序流程立即移动到由这些语句控制的最内层循环的顶部:

     
      
  • for
  •   
  • foreach
  •   
  • while
  •   

答案 1 :(得分:30)

您只需将break替换为return语句。

Foreach-Object中的代码视为匿名函数。如果函数内部有循环,只需使用适用于构造的控件关键字(continuebreak,...)。

答案 2 :(得分:0)

我知道这是一篇过时的文章,但是我想补充一下我为以后在谷歌搜索时登陆这里的其他人学习的知识。

在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个,然后匹配的 something 给了我$i匹配的红线,我看到了something is bad,然后继续进行下一个项目而不说should not see this。我用return进行了测试,它完全退出了循环。