如何在 PowerShell 中退出 Foreach 对象

  1. 使用 break 条件退出 PowerShell 中的 ForEach-Object
  2. 使用 ifbreak 退出 PowerShell 中的 ForEach-Object
  3. 使用 ifreturn 退出 PowerShell 中的 ForEach-Object
  4. 使用 ifcontinue 退出 PowerShell 中的 ForEach-Object
  5. 结论
如何在 PowerShell 中退出 Foreach 对象

ForEach-Object cmdlet 允许用户遍历集合并对输入对象集合中的每个项进行操作。在 ForEach-Object 中,输入对象通过管道传递给 cmdlet 或者使用 -InputObject 参数指定。

在 PowerShell 中构建 ForEach-Object 命令有两种不同的方法:脚本块操作语句ForEach-Object cmdlet 运行每个输入对象的脚本块或操作语句。

使用 脚本块 指定操作。$_ 变量在脚本块中用于表示当前输入对象。

脚本块 可以包含任何 PowerShell 脚本。例如,以下命令获取每个 cmdlet 的 Name 属性、功能和安装在计算机上的 别名 的值。

Get-Command | ForEach-Object { $_.Name }

构建 ForEach-Object 命令的另一种方法是使用 操作 语句。您可以使用操作语句指定属性值或调用方法。

Get-Command | ForEach-Object Name

有时,您可能希望从 ForEach-Object 中退出,但它的工作方式与 ForEach 语句不同。在 ForEach-Object 中,语句在每个对象生成后立即执行。

ForEach 语句中,所有对象在循环执行之前会被收集。ForEach-Object 是一个 cmdlet,而不是一个实际的循环。

当您使用 breakcontinue 退出循环时,整个脚本会终止,而不是跳过其后的语句。然而,通过在 PowerShell 中使用某些条件,可以从 ForEach-Object 对象中退出。

使用 break 条件退出 PowerShell 中的 ForEach-Object

在 PowerShell 中,foreach-object 循环通常用于迭代集合或管道中的每个项。偶尔,基于某些条件,需要提前退出此循环。

break 语句提供了一种简单的方法,通过在满足特定条件时立即终止循环来实现。

$numbers = "one", "two", "three", "four", "five"
$Break = $False;

$numbers | Where-Object { $Break -eq $False } | ForEach-Object {
    $Break = $_ -eq "three";
    Write-Host "The number is $_.";
}

在这个代码片段中,我们初始化一个数组 $numbers,包含表示数字的字符串。我们还将 $Break 初始设置为 $False

foreach-object 循环中,我们使用 Where-Object 根据 $Break 变量过滤项目。如果 $Break$False,循环继续;否则,循环停止。

在循环内,我们检查当前项是否等于 three。如果是,我们将 $Break 设置为 $True,导致循环终止。

输出:

在 PowerShell 中从 foreach 对象退出 - 输出 1

使用 ifbreak 退出 PowerShell 中的 ForEach-Object

有时,需要基于特定条件提前退出此循环。if 方法提供了一种简单的方法,通过在循环内评估条件,当条件满足时触发退出。

在这个方法中,您需要在对象集合中使用一个 值来退出 PowerShell 中的 ForEach-Object。例如,您可以使用 if 条件退出 ForEach-Object

$numbers = "one", "two", "three", "", "four"

$numbers | ForEach-Object {
    if ($_ -eq "") {
        break;
    }
    Write-Host "The number is $_."
}

在提供的代码片段中,我们初始化一个数组 $numbers,包含表示数字的字符串。在 foreach-object 循环中,我们迭代数组中的每个项。

使用 if 语句,我们检查当前项 $_ 是否为空字符串。如果条件为真,我们使用 break 立即退出循环。

否则,循环继续,我们通过 Write-Host 输出当前数字。

输出:

在 PowerShell 中从 foreach 对象退出 - 输出 2

使用 ifreturn 退出 PowerShell 中的 ForEach-Object

在 PowerShell 中,使用 ifreturn 方法组合退出 foreach-object 循环,允许根据特定条件提前终止循环。此方法在需要中止循环执行并将控制权返回给调用者时特别有用,尤其是在遇到特定条件时。

在循环内,使用 if 语句来评估退出循环的条件。如果条件为真,return 语句将执行,立即结束循环执行并将控制权返回给调用者。

$numbers = "one", "two", "three", "four", "five"

$numbers | ForEach-Object {
    if ($_ -eq "three") {
        return
    }
    Write-Host "The number is $_."
}

在提供的代码片段中,我们初始化一个数组 $numbers,包含表示数字的字符串。在 foreach-object 循环中,我们迭代数组中的每个项。

使用 if 语句,我们检查当前项 $_ 是否等于 three。如果条件为真,我们使用 return 立即退出循环。

否则,循环继续,我们通过 Write-Host 输出当前数字。

输出:

在 PowerShell 中从 foreach 对象中退出 - 输出 3

使用 ifcontinue 退出 PowerShell 中的 ForEach-Object

在 PowerShell 中,continue 语句用于跳过当前循环的其余部分并继续到下一个迭代。虽然主要用于循环中跳过特定的迭代,但 continue 也可以用于在 foreach-object 循环中实现一种形式的循环退出。

通过在循环中策略性地放置 continue 语句并结合条件逻辑,您可以根据特定条件实现提前终止循环。

$numbers = 1..10

$numbers | ForEach-Object {
    if ($_ -eq 5) {
        continue
    }
    Write-Host "Number: $_"
}

在提供的代码示例中,我们初始化一个数组 $numbers,包含从 1 到 10 的数字。在 foreach-object 循环中,我们迭代数组中的每个数字。

使用 if 语句,我们检查当前数字是否等于 5。如果条件为真,执行 continue 语句,导致循环跳过当前迭代并进行下一次迭代。

这有效地实现了在满足指定条件时的循环提前终止。

输出:

在 PowerShell 中从 foreach 对象退出 - 输出 4

结论

总结来说,PowerShell 中的 ForEach-Object cmdlet 使遍历集合成为可能,允许对每个项进行单独操作。我们探索了提前退出 ForEach-Object 循环的各种方法,包括使用 breakreturncontinue

虽然 breakcontinue 提供了对循环内的直接控制流,但 return 提供了一种替代方法来退出循环并返回给调用者。每种方法都有其自身的用例和优势,为脚本执行提供了灵活性。

展望未来,用户可以通过在不同场景中实验这些方法,深入了解它们的细微差别,并掌握它们在 PowerShell 脚本中的应用。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相关文章 - PowerShell Object