Powershell 仅在嵌套循环中中断内部循环
我试图实现一个中断,这样当我得到xxxxx次结果时就不必继续循环了Powershell 仅在嵌套循环中中断内部循环,powershell,powershell-3.0,Powershell,Powershell 3.0,我试图实现一个中断,这样当我得到xxxxx次结果时就不必继续循环了 $baseFileCsvContents | ForEach-Object { # Do stuff $fileToBeMergedCsvContents | ForEach-Object { If ($_.SamAccountName -eq $baseSameAccountName) { # Do something break
$baseFileCsvContents | ForEach-Object {
# Do stuff
$fileToBeMergedCsvContents | ForEach-Object {
If ($_.SamAccountName -eq $baseSameAccountName) {
# Do something
break
}
# Stop doing stuff in this For Loop
}
# Continue doing stuff in this For Loop
}
问题是,break正在退出两个ForEach对象
循环,我只希望它退出内部循环。我尝试过读取和设置标志,比如:outer
,但是我得到的只是语法错误
有人知道如何执行此操作吗?您将无法对ForEach对象使用命名循环,但可以使用ForEach关键字执行此操作,如下所示:
$OuterLoop = 1..10
$InnerLoop = 25..50
$OuterLoop | ForEach-Object {
Write-Verbose "[OuterLoop] $($_)" -Verbose
:inner
ForEach ($Item in $InnerLoop) {
Write-Verbose "[InnerLoop] $($Item)" -Verbose
If ($Item -eq 30) {
Write-Warning 'BREAKING INNER LOOP!'
BREAK inner
}
}
}
现在,每当每个内部循环上的值达到30时,它将跳转到外部循环并继续。使用return关键字有效,因为“ForEach对象”将scriptblock作为参数,然后为管道中的每个元素调用该scriptblock
1..10 |每个对象{
$a=$_
1..2 |每个对象{
if($a-eq 5-和$q-eq 1){return}
“$a$\
}
"---"
}
将跳过“5 1”Bummer。在每个对象的
ForEach
循环中有很多复杂的东西(实际的代码可以在这里查看-)。如果我将ForEach对象
更改为ForEach
,它将中断脚本。看起来我不能利用休息时间了…实际上我把它拿回去,我把它改成了ForEach,它成功了。谢谢:)我在PS5中获得了+FullyQualifiedErrorId:CommandNotFoundException,其中的:internal
在PS5中有效,而另一个答案名为loop和foreach,而不是foreach对象,则无效。