我有一个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
无效。
答案 0 :(得分:31)
您可能希望使用Continue
语句继续最内层循环。
摘自PowerShell
帮助文件:
在脚本中,
continue
语句会导致程序流程立即移动到由这些语句控制的最内层循环的顶部:
for
foreach
while
答案 1 :(得分:30)
您只需将break
替换为return
语句。
将Foreach-Object
中的代码视为匿名函数。如果函数内部有循环,只需使用适用于构造的控件关键字(continue
,break
,...)。
答案 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
进行了测试,它完全退出了循环。