[玩转系统] 如何使用 PowerShellWhere-Object 来过滤所有内容
作者:精品下载站 日期:2024-12-14 13:04:12 浏览:15 分类:玩电脑
如何使用 PowerShellWhere-Object 来过滤所有内容
当您使用对象集合中的 PowerShell 属性值时,有时您需要一种方法来过滤掉所有不需要的内容。了解如何使用 PowerShell Where-Object
cmdlet 是 PowerShell 工具箱中一项重要技能。
Where-Object
cmdlet 是过滤对象的便捷方法。在本教程中,您将学习构建 Where-Object
命令的不同方法、它的可用参数、语法,以及如何像专业人士一样使用多个条件!
先决条件
本文只有一个先决条件。您应该对 PowerShell 命令和语法有一定的了解。
本文中的所有示例都将基于 PowerShell 当前的稳定版本(撰写本文时为 7.1.0)。但只要您拥有 Windows PowerShell 4.0 及更高版本,这些命令的工作方式就相同。
了解 PowerShellWhere-Object 如何工作
PowerShell Where-Object
cmdlet 的唯一目标是过滤命令返回的输出,仅返回您想要查看的信息。
简而言之,Where-Object
cmdlet 是一个过滤器;就是这样。它允许您构造一个返回 True 或 False 的条件。根据该条件的结果,cmdlet 返回或不返回输出。
您可以通过以下两种方式之一来制定该条件:使用脚本块的“旧”方式和使用参数或比较语句的“新”方式。
使用脚本块创建过滤条件
脚本块是 PowerShell 中的关键组件。脚本块在整个语言的数百个地方使用。脚本块是一个匿名函数。这是一种划分代码并在不同位置执行它的方法。您可以通过脚本块为 Where-Object
构建过滤器。
要将脚本块用作过滤器,您可以使用 FilterScript
参数。此参数允许您创建脚本块并将其传递给随后执行的 FilterScript 参数。
如果脚本块返回布尔值 False 或 null 变量以外的值,则将其视为 True。如果不是,则被认为是 False。
例如,假设您需要查找当前启动类型为“自动”的所有 Windows 服务。您首先使用 Get-Service
收集所有当前服务。然后,Get-Service
返回许多具有各种属性的不同服务对象。
然后,您可以使用 PowerShell 管道将这些对象通过管道传输到 Where-Object
cmdlet 并使用 FilterScript
参数。由于 FilterScript
参数接受脚本块,因此您可以创建一个条件来检查每个对象的 StartType
属性是否等于 Automatic,例如以下。
{$_.StartType -EQ 'Automatic'}
获得过滤脚本块后,您可以将该脚本块提供给 FilterScript 参数。然后,Where-Object
将为管道中传入的每个对象执行该脚本块,并评估每个 StartType
属性。如果属性等于Automatic,Where-Object
将传递该对象。如果没有,该物体就会被丢弃。
您可以在下面看到此方法的一个简单示例。
Get-Service | Where-Object -FilterScript {$_.StartType -EQ 'Automatic'}
许多人将位置参数与 Where-Object
cmdlet 结合使用,但不包含 FilterScript
参数名称。相反,它们只是单独提供脚本块,例如 Where-Object {$_.StartType -eq 'Automatic'}
。
虽然这种类型的构造适用于这种特定的场景。带有大括号的脚本块甚至管道变量 $_
的概念使得代码的可读性较差,并且对于经验不足的 PowerShell 用户来说更加困难。这种可读性问题是导致 PowerShell 团队引入参数或比较语句的原因。
比较声明
Windows PowerShell 3.0 中引入的比较语句的构造方式更加自然。使用与前面的示例相同的场景,让我们使用比较语句构造来查找具有自动启动类型的所有 Windows 服务:
Get-Service | Where-Object -Property StartType -EQ 'Automatic'
请注意,上面的命令没有使用脚本块,而是将对象属性指定为 Property
参数的参数值。 eq
运算符现在也是一个参数,允许您将Automatic 的值传递给它。
现在以这种方式使用参数完全消除了对脚本块的需要。
在定义更复杂的过滤条件时,脚本块是更好的选择。 Property
参数可能并不总是最佳选择。如果使用脚本块,请记住使用注释来记录您的代码!
在下一节中,您将了解可用的比较运算符类型,这些类型可与 Where-Object
一起使用来过滤所有内容。
过滤基础知识
Where-Object
使用参数,使用通用比较运算符过滤对象集合。让我们深入了解它们如何工作的一些示例。
收容操作员
包含运算符在处理集合时非常有用。包含运算符允许您定义集合是否包含项目的条件。
举个例子,假设您想要过滤集合中的特定属性值。您可以使用包含运算符。
在 PowerShell 中,您会发现一些不同的包含运算符:
-contains
/-ccontains
- 过滤包含属性值的集合。-notcontains
/-cnotcontains
- 过滤不包含属性值的集合。-in
/-cin
- 值位于集合中,如果找到匹配则返回属性值。-notin
/-cnotin
- 值不在集合中,如果没有属性则为null
/$false
价值。
为了区分大小写,请使用以 -c[operator] 开头的包含运算符
相关:通过示例了解 PowerShell 比较运算符
假设您想要检查 BITS Windows 服务的状态。您可以使用 contains
参数(运算符)将 BITS 的值传递给它,如下所示。
Get-Service | Where-Object -Property Name -Contains 'BITS'
以下是您期望看到的内容:
永远记住要向左过滤!前面的示例相当于运行 Get-Service -ServiceName 'BITS'
。
也许您想更进一步并找到所有状态不是正在运行且StartType的服务这是在一个名为Manual的单个字符串(或者可以是一个数组)中。使用下面的脚本块,该命令使用 FilterScript
参数来传递根据这两个条件进行评估的脚本块。
相关:回归基础:了解 PowerShell 对象
Get-Service |
Where-Object {($_.Status -notcontains 'Running') -and ($_.StartType -in 'Manual')}
当您运行上述命令时,您只会看到已停止且 StartType 为 Manual 的服务。
使用包含运算符进行过滤对于包含许多属性值的集合效果很好。考虑到 Get-Service
返回的属性数量,当您组合包含运算符和逻辑运算符时,可以更轻松地过滤所有这些属性。
匹配运算符
与将包含运算符与 Where-Object
结合使用类似,您也可以使用数学运算符。匹配运算符允许您匹配字符串内部的字符串。例如,'foofoo' -like '*foo*'
返回 True 或 'foofoo' -match 'foo'
返回 True。匹配运算符匹配字符串中的字符串。
在 PowerShell 中,您可以在 Where-Object
中使用一些不同的匹配运算符。
-like
/-clike
- 字符串与通配符模式匹配。-notlike
/-cnotlike
- 字符串与通配符模式不匹配。-match
/-cmatch
- 字符串与正则表达式模式匹配。-notmatch
/-cnotmatch
- 字符串与正则表达式模式不匹配
为了区分大小写,请使用以 -c[operator] 开头的匹配运算符
其形式与包含运算符几乎相同,您可以使用匹配运算符,如下所示。以下示例查找 DisplayName 属性值中包含 Windows 的所有服务。
Get-Service | Where-Object { $_.DisplayName -match 'Windows'}
相关:PowerShell 和 Regex 入门
您还可以使用 like
运算符来使用常见的匹配技术,例如使用通配符 (*
) 来匹配任何字符,或者使用 ?
来匹配单个字符。
Get-Service | Where-Object {($_.Name -like 'Win*')}
现在,结果将被过滤为仅包含“Win”作为前三个字符的服务名称:
使用通配符意味着您不必知道服务的全名。只需要字符串中的几个字母即可。这些运算符还可以与逻辑运算符结合使用,以进一步增强过滤功能。
等式运算符
与如何使用包含和比较运算符类似,您还可以将相等运算符与 Where-Object
一起使用。当需要比较数值时,相等运算符非常有用。
例如,1 -eq 1
为 True,而 1 -gt 2
为 False。 PowerShell 有许多不同的等式运算符,您可以将它们用作 Where-Object
参数或条件脚本块内部。
-eq
/-ceq
- 值等于指定值。-ne
/-cne
- 值不等于指定值。-gt
/-cgt
- 值大于指定值。-ge
/-cge
- 值大于或等于指定值。-lt
/-clt
- 值小于指定值。-le
/-cle
- 值小于或等于指定值。
例如,也许您想查找占用 CPU 2% 到 10% 的所有正在运行的进程。对于 Get-Process
和 Where-Object
PowerShell cmdlet 来说这不是问题。
使用脚本块,您可以使用 and
运算符将两个条件组合在一起,该运算符将对它们进行评估。如果它们都返回 True,则 Where-Object
返回通过管道传递的流程对象。如果至少有一个条件返回 False,则 Where-Object
会删除该对象。
Get-Process | Where-Object {($_.CPU -gt 2.0) -and ($_.CPU -lt 10)}
以下是您期望看到的内容:
使用 Where-Object
等式运算符进行过滤将帮助您构建系统报告或比较值。
下一步
现在您已经了解了如何使用 PowerShell Where-Object
cmdlet 来过滤所有内容的更多信息,您还能做什么?尝试一些更复杂的过滤任务,在集合上使用多个条件和运算符来过滤属性值并根据您的喜好格式化输出。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag