在 PowerShell 中使用 Where-Object 命令
当你在对象集合中使用 Windows PowerShell 属性时,有时你需要一种方法来过滤你只需要的所有特定内容。因此,了解如何使用 Windows PowerShell Where-Object
cmdlet 是你的 Windows PowerShell 技能集的一项重要技术。
Where-Object
cmdlet 是过滤对象的重要命令。在本文中,我们将学习构造 Where-Object
命令的几种方法、其语法以及多个条件语句的使用。
PowerShell 中的 Where-Object
Cmdlet
Windows PowerShell Where-Object
cmdlet 的唯一目标是过滤命令的输出并返回我们想要打印的特定信息。
总之,Where-Object
cmdlet 是一个过滤器。它允许我们构造一个返回 True
或 False
的条件。然后根据情况的结果,cmdlet 要么返回输出,要么不返回。
你可以通过两种方式制作该条件:脚本块和参数。
在 PowerShell 中使用脚本块创建筛选条件
脚本块是 Windows PowerShell 中的重要组件。它们在整个脚本语言中的数百个地方使用。脚本块是一个匿名函数,它对代码进行分类并在不同的地方执行它。
示例脚本块:
{$_.StartType -EQ 'Automatic'}
使用 Windows PowerShell 管道,你可以将这些对象通过管道传输到 Where-Object
cmdlet 并使用 FilterScript
参数。由于 FilterScript
参数接受一个脚本块,我们可以创建一个条件来检查每个对象的属性是否等于特定值,如下例所示。
示例代码:
Get-Service | Where-Object -FilterScript {$_.StartType -eq 'Automatic'}
虽然这种类型的语法适用于这种特定场景,但带有花括号 ({}
) 的脚本块的概念会使代码的可读性降低,并且对于经验不足的 Windows PowerShell 用户来说更加困难。此可读性问题导致 Windows PowerShell 团队引入参数。
在 PowerShell 中使用参数创建筛选条件
在 Windows PowerShell 3.0 中引入的参数在其编写方式上更加自然。使用与前面相同的示例,让我们使用参数来过滤特定的输出。
示例代码:
Get-Service | Where-Object -Property StartType -eq 'Automatic'
请注意,该命令不使用脚本块,而是将对象属性指定为 Property 参数的参数值。此外,-eq
运算符现在是一个参数,允许你将 Automatic
值传递给它。
以这种方式使用参数现在消除了对脚本块的需要。但是,尽管 Microsoft 已将参数作为一种更简洁的脚本编写方式引入,但我们有充分的理由使用脚本块,我们将在本文的下一部分讨论。
使用多个条件语句
你可以使用运算符(如 -and
或 -or
)组合两个或多个条件,以使用脚本块评估它们。但是,我们需要使用称为子表达式的特定 Windows PowerShell 组件来成功评估每个条件。
在 Windows PowerShell 中,我们可以使用子表达式在诸如 Where-Object
之类的过滤语法中运行表达式。我们通过用括号 (()
) 将我们运行的任何条件语句括起来来做到这一点。
示例代码:
Get-Process | Where-Object {($_.CPU -gt 2.0) -and ($_.CPU -lt 10)}
示例脚本块:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
334 21 18972 26384 5.23 3808 0 AnyDesk
635 34 13304 51264 9.56 4140 5 notepad
726 36 12820 51196 4.69 12088 5 notepad
802 46 18356 65088 7.98 10784 5 OneDrive
340 18 6472 26436 3.44 1252 5 RuntimeBroker
698 34 14672 44484 3.63 3284 5 RuntimeBroker
323 19 5732 23432 4.00 11200 5 RuntimeBroker
560 18 6440 27752 4.63 8644 5 sihost
632 31 21524 69972 2.81 6392 5 StartMenuExperienceHost
390 18 9756 30832 3.94 3084 5 svchost
523 24 8768 36312 2.17 6300 5 svchost
524 17 6416 21036 4.42 10932 5 SynTPEnh
525 22 15336 38904 3.41 2192 5 TextInputHost
相关文章
在 Windows PowerShell 中获取命令行参数
发布时间:2024/03/04 浏览次数:358 分类:编程语言
-
本文将解释我们如何使用 PowerShell 的参数函数处理命令行参数,参数如何工作,我们如何使用 PowerShell 参数将值传递给参数,以及定义参数的基本方法是什么。
Windows PowerShell 中的 Base64 编码
发布时间:2024/03/04 浏览次数:332 分类:编程语言
-
本文将展示如何编码和解码 base64 字符串。Windows PowerShell 当前版本没有本机命令,因此我们将向你展示如何执行此操作的替代方法。
在 Windows PowerShell 中写入输出
发布时间:2024/03/04 浏览次数:259 分类:编程语言
-
本文将向你展示如何在 Windows PowerShell 中编写或打印输出。本文还将区分多个 write cmdlet 并解释它们的意义。
在 Windows PowerShell 中设置 PATH 环境变量
发布时间:2024/03/04 浏览次数:350 分类:编程语言
-
本文将展示在 Windows PowerShell 中设置路径环境变量的正确方法。本文还展示了如何在持久性和非持久性方法中设置变量。
在 Windows PowerShell 中打印环境变量
发布时间:2024/03/04 浏览次数:869 分类:编程语言
-
本文将讨论什么是环境变量以及如何使用多个 Windows PowerShell 命令打印它们。
在 PowerShell 中注释代码
发布时间:2024/03/04 浏览次数:363 分类:编程语言
-
本文将展示在 Windows PowerShell 中注释代码的多种方法。本文还介绍了注释代码时的一些最佳实践。
在 PowerShell 中执行 LDAP 查询
发布时间:2024/03/04 浏览次数:304 分类:编程语言
-
本文将深入了解如何使用 Active Directory 过滤器和 LDAP 过滤器。