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

Bar*_*Vos 24 powershell

我有一个PowerShell脚本,可以对许多域中的所有域管理员进行一些检查.对于每个用户帐户,执行了许多检查.当其中一个失败时,脚本应该转到列表中的下一个管理员.

我目前有类似的东西(简化):

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

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

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

这会停止整个脚本.有没有办法去下一个元素?

$foreach.movenext()因为不工作$foreachnull.

小智 33

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

摘自PowerShell帮助文件:

在脚本中,该continue语句使程序流立即移动到由这些语句中的任何一个控制的最内层循环的顶部:

  • for
  • foreach
  • while

  • 这为我退出了整个`ForEach-Object`声明.`return`有效(即转到下一个对象). (13认同)
  • 这不应该是IMO接受的答案,因为它是错误的.正如@aucuparia的评论所说,你必须"返回"而不是"继续".不是很直观,但事实就是如此. (10认同)
  • Foreach-object不是foreach(也不是声明),所以这只是错误的. (3认同)

Thi*_*tti 32

你只需break要用一个return语句替换它.

将内部代码Foreach-Object视为匿名函数.如果你在函数内部循环,只需使用适用于建筑(控制关键字continue,break...).

  • 只需将foreach-object中的代码视为匿名函数即可.如果函数内部有循环,只需使用适用于构造的控件关键字(continue,break,...) (3认同)