Where-Object

创建控制哪些对象沿着命令管道传递的筛选器。

语法

Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>] [<CommonParameters>]

说明

Where-Object cmdlet 从传递给它的对象集合中选择对象。它使用脚本块作为筛选器,并对每个对象的脚本块进行评估。如果评估结果为“True”,则返回该对象。如果评估结果不是“True”,则忽略该对象。

参数

-FilterScript <scriptblock>

指定用于筛选对象的脚本块。脚本块需放在大括号 ({}) 中。

是否为必需?

true

位置?

1

默认值

是否接受管道输入?

false

是否接受通配符?

false

-InputObject <psobject>

指定要筛选的对象。还可将对象通过管道传递给 Where-Object。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

true (ByValue)

是否接受通配符?

false

<CommonParameters>

此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.Management.Automation.PSObject

可以通过管道将要筛选的对象传递给 Where-Object。

输出

示例 1

C:\PS>get-service | where-object {$_.Status -eq "Stopped"}

说明
-----------
此命令获取当前被停止的所有服务的列表。“$”符号代表传递给 Where-Object cmdlet 的每个对象。





示例 2

C:\PS>get-process | where-object {$_.workingset -gt 25000*1024}

说明
-----------
此命令列出了工作集大于 25,000 KB(千字节)的进程。由于 WorkingSet 属性的值以字节存储,因此需将值 25,000 与 1,024 相乘。





示例 3

C:\PS>get-process | where-object { $_.ProcessName -match "^p.*" }

说明
-----------
此命令获取 ProcessName 属性以字母“p”开头的进程。通过此匹配运算符,您可以在 Where 子句中使用正则表达式。





示例 4

C:\PS>get-process -name svchost | where-object {$True}

说明
-----------
此命令列出名为“svchost”的所有进程。

Where-Object cmdlet 对脚本块进行评估(脚本块通常包含对管道 ($_) 中的当前对象的引用),并将结果强制转换为布尔类型:True 或 False。如果结果为“True”,则返回该对象。否则,将丢弃该对象。

在本例中,脚本块仅返回 True,因此将返回所有对象。