首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PowerShell中退出ForEach-Object

如何在PowerShell中退出ForEach-Object
EN

Stack Overflow用户
提问于 2012-04-23 17:32:24
回答 8查看 273.4K关注 0票数 75

我有以下代码:

代码语言:javascript
复制
$project.PropertyGroup | Foreach-Object {
    if($_.GetAttribute('Condition').Trim() -eq $propertyGroupConditionName.Trim()) {
        $a = $project.RemoveChild($_);
        Write-Host $_.GetAttribute('Condition')"has been removed.";
    }
};

问题#1:如何退出ForEach-Object?我试着使用"break“和"continue",但不起作用。

问题#2:我发现我可以在

循环...我们不能在C#中那样做...为什么PowerShell允许我们这样做?

EN

回答 8

Stack Overflow用户

发布于 2019-01-18 09:11:02

两者之间存在差异

..。

你可以在这里找到一个非常好的描述:

MS-ScriptingGuy

对于PS中的测试,这里有一些脚本来显示不同之处。

ForEach-Object:

代码语言:javascript
复制
# Omit 5.
1..10 | ForEach-Object {
if ($_ -eq 5) {return}
# if ($_ -ge 5) {return} # Omit from 5.
Write-Host $_
}
write-host "after1"
代码语言:javascript
复制
# Cancels whole script at 15, "after2" not printed.
11..20 | ForEach-Object {
if ($_ -eq 15) {continue}
Write-Host $_
}
write-host "after2"
代码语言:javascript
复制
# Cancels whole script at 25, "after3" not printed.
21..30 | ForEach-Object {
if ($_ -eq 25) {break}
Write-Host $_
}
write-host "after3"

前置

代码语言:javascript
复制
# Ends foreach at 5.
foreach ($number1 in (1..10)) {
if ($number1 -eq 5) {break}
Write-Host "$number1"
}
write-host "after1"
代码语言:javascript
复制
# Omit 15. 
foreach ($number2 in (11..20)) {
if ($number2 -eq 15) {continue}
Write-Host "$number2"
}
write-host "after2"
代码语言:javascript
复制
# Cancels whole script at 25, "after3" not printed.
foreach ($number3 in (21..30)) {
if ($number3 -eq 25) {return}
Write-Host "$number3"
}
write-host "after3"
票数 28
EN

Stack Overflow用户

发布于 2014-12-25 01:15:02

要停止其流水线,请执行以下操作

只需使用语句的一部分

下的脚本块内部

..。

当您在中使用它时,它的行为会有所不同

和在

这就是为什么它是可能的。如果您想继续在管道中生成对象,丢弃一些原始对象,那么最好的方法是使用

..。

票数 10
EN

Stack Overflow用户

发布于 2020-01-01 23:26:00

下面是对问题#1的建议方法,如果我希望使用ForEach-Object cmdlet,则使用该方法。它不会直接回答这个问题,因为它不会退出管道。然而,它在Q#1中可能会达到预期的效果,像我这样的业余爱好者唯一能看到的缺点是在处理大型流水线迭代时。

代码语言:javascript
复制
$zStop = $false
    (97..122) | Where-Object {$zStop -eq $false} | ForEach-Object {
    $zNumeric = $_
    $zAlpha = [char]$zNumeric
    Write-Host -ForegroundColor Yellow ("{0,4} = {1}" -f ($zNumeric, $zAlpha))
    if ($zAlpha -eq "m") {$zStop = $true}
    }
    Write-Host -ForegroundColor Green "My PSVersion = 5.1.18362.145"

我希望这是有用的。祝大家新年快乐。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10277994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档