Powershell 仅在嵌套循环中中断内部循环

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

我试图实现一个中断,这样当我得到xxxxx次结果时就不必继续循环了

$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对象,则无效。