在 PowerShell 中嵌套 ForEach-Object 和 Where-Object

  1. 在 PowerShell 中使用 Where-Object Cmdlet
  2. 在 PowerShell 中使用 ForEach-Object Cmdlet
  3. 在 PowerShell 中使用嵌套的 ForEach-ObjectWhere-Object
  4. 在 PowerShell 中使用嵌套的 ForEach-ObjectWhere-Objectif 语句
  5. 结论
在 PowerShell 中嵌套 ForEach-Object 和 Where-Object

PowerShell 的 Where-ObjectForEach-Object cmdlet 是系统化和高效数据过滤和处理的不可或缺的工具。通过利用这些 cmdlet 的强大功能,PowerShell 用户可以精确而轻松地操作数据集,根据特定条件执行操作,并轻松迭代集合。

本文阐明了 Where-ObjectForEach-Object 的用法,演示它们如何单独和结合使用以完成各种任务。从过滤 Windows 服务到对数值数据进行计算,甚至实施嵌套操作以应对更复杂的场景,这些 cmdlet 为 PowerShell 脚本中的数据操作提供了强大的框架。

在 PowerShell 中使用 Where-Object Cmdlet

Where-Object 是一个内置的 cmdlet,用于过滤输出命令并显示您想要看到的信息。通常,Where-Object 的运行方式就像一个过滤器。

它还允许您创建可以返回真或假的条件。

在下面的示例中,我们将查找在我们的计算机上以 自动 模式运行的所有服务。为此目的的命令是类似于以下内容:

Get-Service | Where-Object -FilterScript { $_.StartType -EQ 'Automatic' }

在这个代码片段中,我们首先使用 Get-Service cmdlet 检索一组 Windows 服务。然后将此集合通过管道传输到 Where-Object cmdlet,在这里对管道中的每个服务对象应用过滤脚本。

在过滤脚本中,我们评估每个服务对象的 StartType 属性,以确定它是否等于字符串 "Automatic"。如果服务的 StartType 属性符合此标准,则它将通过管道传递。

这个过滤脚本有效地选择了那些启动类型设置为 "Automatic" 的服务。这个过滤操作的结果是原始服务集合的一个子集,只包含配置为自动启动的服务。

在运行上述命令行后,您将得到如下所示的输出:

powershell 嵌套 foreach-object where-object - 输出 1

在 PowerShell 中使用 ForEach-Object Cmdlet

ForEach-Object 允许您对每个指定的对象执行特定任务。在我们下面的示例中,我们将每个对象除以 1024

我们示例的代码将类似于以下内容:

3000, 567980, 112432 | ForEach-Object -Process { $_ / 1024 }

在这个代码片段中,我们使用 ForEach-Object cmdlet 遍历三个数字的集合:3000567980112432。在脚本块中,我们通过将每个数字除以 1024 来执行计算。

这个计算对集合中的每个数字单独执行。因此,我们获得了一个新的集合,其中包含除法运算的结果,原始集合中的每个数字都被除以 1024

在运行上述命令行后,您将得到如下所示的输出:

powershell 嵌套 foreach-object where-object - 输出 2

在 PowerShell 中使用嵌套的 ForEach-ObjectWhere-Object

ForEach-ObjectWhere-Object cmdlet 的组合允许强大的数据操作和过滤操作。嵌套方法,即在一个 cmdlet 的作用域内使用另一个 cmdlet,增强了迭代和选择性处理数据的能力。

这种方法在处理数组或对象集合时特别有用,并需要根据特定标准执行操作。

示例:

$MyArray = ("python", "explorer", "edge")
$MyArray | ForEach-Object { Get-Process | Where-Object ProcessName -EQ $_ | Out-Host }

在这个代码片段中,$MyArray 包含一个进程名称的列表。ForEach-Object cmdlet 遍历数组中的每个进程名称。

在脚本块中,Get-Process 检索所有正在运行的进程的信息,Where-Object 根据它们的 ProcessName 属性与当前进程名称 ($_) 匹配的条件过滤这些进程。过滤后的进程对象然后通过 Out-Host 输出到控制台。

输出:

powershell 嵌套 foreach-object where-object - 输出 3

在 PowerShell 中使用嵌套的 ForEach-ObjectWhere-Objectif 语句

在 PowerShell 脚本中,嵌套的 if 语句提供了一种在循环和其他控制结构中应用条件逻辑的方法。当与 ForEach-ObjectWhere-Object cmdlet 结合使用时,嵌套的 if 语句使得复杂的数据过滤和处理操作成为可能。

这种方法在根据多个标准处理数据时提供了灵活性和细粒度控制。它在需要对数据操作进行细致控制的场景中特别有用。

示例:

$MyArray = @("Value1", "Value2", "Value3")
$MyArray | ForEach-Object {
    if ($_ | Where-Object { $_ -eq "Value1" -or $_ -eq "Value3" }) {
        $_ | Out-Host
    }
}

在这个代码片段中,$MyArray 包含一个值的列表。ForEach-Object cmdlet 遍历数组中的每个值。

在嵌套的 if 语句中,Where-Object 根据值等于 "Value1""Value3" 的条件过滤值。

如果条件满足,该值将使用 Out-Host 输出到控制台。

输出:

powershell 嵌套 foreach-object where-object - 输出 4

结论

通过其多功能的 cmdlet,如 Where-ObjectForEach-Object,PowerShell 赋予用户以精细的方式处理复杂数据的能力。无论是从集合中选择特定元素,应用条件逻辑,还是对每个项进行迭代执行任务,PowerShell 提供了必要的工具来简化工作流程并提高生产力。

通过掌握这些 cmdlet 并理解其细微差别,用户可以充分利用 PowerShell 高效进行数据操作和脚本任务,在自动化和管理中开启无限可能的世界。

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

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

相关文章 - PowerShell Object