Where-Object
根据集合的属性值从集合中选择对象。
语法
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-EQ]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-FilterScript] <ScriptBlock>
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-LE]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CGE]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CLE]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CIn]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-GE]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CLike]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-NotLike]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CNotLike]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-Match]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CMatch]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-NotMatch]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CNotMatch]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-Contains]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CContains]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-NotContains]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CNotContains]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-In]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-Like]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-NotIn]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CNotIn]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-Is]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-IsNot]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CEQ]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-NE]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CNE]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-GT]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CGT]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-LT]
[<CommonParameters>]
Where-Object
[-InputObject <PSObject>]
[-Property] <String>
[[-Value] <Object>]
[-CLT]
[<CommonParameters>]
说明
Where-Object
cmdlet 从传递给它的对象的集合中选择具有特定属性值的对象。
例如,可以使用 Where-Object
cmdlet 来选择在特定日期之后创建的文件、具有特定 ID 的事件或使用特定版本的 Windows 的计算机。
从 Windows PowerShell 3.0 开始,可通过两种不同的方法来构造 Where-Object
命令。
脚本块。 可以使用脚本块来指定属性名称、比较运算符和属性值。
Where-Object
返回脚本块语句为 true 的所有对象。例如,以下命令获取 Normal 优先级类中的进程,即 PriorityClass 属性的值等于 Normal 的进程。
Get-Process | Where-Object {$_.PriorityClass -eq "Normal"}
所有 PowerShell 比较运算符都以脚本块格式有效。 有关比较运算符的详细信息,请参阅 about_Comparison_Operators。
比较语句。 还可以编写比较语句,这更像是自然语言。 Windows PowerShell 3.0 中引入了比较语句。
例如,以下命令还获取具有 Normal 优先级类的进程。 这些命令是等效的,可以互换使用。
Get-Process | Where-Object -Property PriorityClass -eq -Value "Normal"
Get-Process | Where-Object PriorityClass -eq "Normal"
从 Windows PowerShell 3.0 开始,Where-Object 在 Where-Object 命令中添加比较运算符作为参数。 除非指定,否则所有运算符都区分大小写。 在 Windows PowerShell 3.0 之前,PowerShell 语言中的比较运算符只能在脚本块中使用。
示例
示例 1:获取已停止的服务
这些命令获取当前已停止的所有服务的列表。
$_
自动变量表示传递给 Where-Object
cmdlet 的每个对象。
第一个命令使用脚本块格式,第二个命令使用比较语句格式。
这些命令是等效的,可以互换使用。
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Get-Service | where Status -eq "Stopped"
示例 2:基于工作集获取进程
这些命令列出工作集大于 25,000 KB(KB)的工作集的进程。 由于 WorkingSet 属性的值以字节为单位存储,因此值 25,000 乘以 1,024。
scriptblock 和语句语法是等效的,可以互换使用。
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
示例 3:基于进程名称获取进程
这些命令获取以字母 p开头的 ProcessName 属性值的进程。 Match 运算符允许使用正则表达式匹配。
scriptblock 和语句语法是等效的,可以互换使用。
Get-Process | Where-Object {$_.ProcessName -Match "^p.*"}
Get-Process | Where-Object ProcessName -Match "^p.*"
示例 4:使用比较语句格式
此示例演示如何使用 Where-Object
cmdlet 的新比较语句格式。
第一个命令使用比较语句格式。 在此命令中,不使用别名,所有参数都包含参数名称。
第二个命令是比较命令格式的更自然的使用。
别名替换为
Get-Process | Where-Object -Property Handles -GE -Value 1000
Get-Process | where Handles -GE 1000
示例 5:基于属性获取命令
此示例演示如何编写返回为 true 或 false 或具有指定属性的任何值的项的命令。 每个示例都显示了命令的脚本块和比较语句格式。
# Use Where-Object to get commands that have any value for the OutputType property of the command.
# This omits commands that do not have an OutputType property and those that have an OutputType property, but no property value.
Get-Command | where OutputType
Get-Command | where {$_.OutputType}
# Use Where-Object to get objects that are containers.
# This gets objects that have the **PSIsContainer** property with a value of $True and excludes all others.
Get-ChildItem | where PSIsContainer
Get-ChildItem | where {$_.PSIsContainer}
# Finally, use the Not operator (!) to get objects that are not containers.
# This gets objects that do have the **PSIsContainer** property and those that have a value of $False for the **PSIsContainer** property.
Get-ChildItem | where {!$_.PSIsContainer}
# You cannot use the Not operator (!) in the comparison statement format of the command.
Get-ChildItem | where PSIsContainer -eq $False
示例 6:使用多个条件
Get-Module -ListAvailable | where {($_.Name -notlike "Microsoft*" -and $_.Name -notlike "PS*") -and $_.HelpInfoUri}
此示例演示如何创建具有多个条件的 Where-Object
命令。
此命令获取支持可更新帮助功能的非核心模块。
该命令使用 cmdlet 的 Get-Module
参数来获取计算机上的所有模块。
管道运算符 (|) 将模块发送到 Where-Object
cmdlet,该 cmdlet 获取名称不以 Microsoft 或 PS 开头的模块,并具有 HelpInfoURI 属性的值,该属性告知 PowerShell 在何处查找模块的更新帮助文件。
比较语句由 And 逻辑运算符连接。
此示例使用脚本块命令格式。
逻辑运算符(如 And 和 Or)仅在脚本块中有效。
不能在 Where-Object
命令的比较语句格式中使用它们。
- 有关 PowerShell 逻辑运算符的详细信息,请参阅 about_Logical_Operators。
- 有关可更新帮助功能的详细信息,请参阅 about_Updatable_Help。
参数
-CContains
指示如果对象的属性值与指定值完全匹配,则此 cmdlet 从集合中获取对象。 此操作区分大小写。
例如:Get-Process | where ProcessName -CContains "svchost"
CContains 引用值集合,如果集合包含与指定值完全匹配的项,则为 true。 如果输入是单个对象,PowerShell 会将其转换为一个对象的集合。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CEQ
指示如果属性值与指定值相同,则此 cmdlet 获取对象。 此操作区分大小写。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CGE
指示如果属性值大于或等于指定值,则此 cmdlet 获取对象。 此操作区分大小写。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CGT
指示如果属性值大于指定值,则此 cmdlet 获取对象。 此操作区分大小写。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CIn
指示如果属性值包含指定的值,则此 cmdlet 获取对象。 此操作区分大小写。
例如:Get-Process | where -Value "svchost" -CIn ProcessName
“abc”、“def”-CContains“abc”
“abc”-CIn“abc”、“def”
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CLE
指示如果属性值小于或等于指定值,则此 cmdlet 获取对象。 此操作区分大小写。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CLike
指示如果属性值与包含通配符的值匹配,则此 cmdlet 获取对象。 此操作区分大小写。
例如:Get-Process | where ProcessName -CLike "*host"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CLT
指示如果属性值小于指定值,则此 cmdlet 获取对象。 此操作区分大小写。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CMatch
指示如果属性值与指定的正则表达式匹配,则此 cmdlet 获取对象。
此操作区分大小写。
当输入为标量时,匹配的值将保存在 $Matches
自动变量中。
例如:Get-Process | where ProcessName -CMatch "Shell"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CNE
指示如果属性值不同于指定值,则此 cmdlet 获取对象。 此操作区分大小写。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CNotContains
指示如果对象的属性值与指定值不完全匹配,则此 cmdlet 获取对象。 此操作区分大小写。
例如:Get-Process | where ProcessName -CNotContains "svchost"
“NotContains”和“CNotContains”是指值的集合,并且当集合不包含与指定值完全匹配的任何项时为 true。 如果输入是单个对象,PowerShell 会将其转换为一个对象的集合。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CNotIn
指示如果属性值与指定值不完全匹配,则此 cmdlet 获取对象。 此操作区分大小写。
例如:Get-Process | where -Value "svchost" -CNotIn -Property ProcessName
NotIn 和 CNotIn 运算符 类似于 NotContains 和 CNotContains,但属性值和值位置相反。 例如,以下语句为 true。
“abc”、“def”-CNotContains“Abc”
“abc”-CNotIn“Abc”、“def”
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CNotLike
指示如果属性值与包含通配符的值不匹配,则此 cmdlet 获取对象。 此操作区分大小写。
例如:Get-Process | where ProcessName -CNotLike "*host"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-CNotMatch
指示如果属性值与指定的正则表达式不匹配,则此 cmdlet 获取对象。
此操作区分大小写。
当输入为标量时,匹配的值将保存在 $Matches
自动变量中。
例如:Get-Process | where ProcessName -CNotMatch "Shell"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Contains
指示如果对象属性值中的任何项与指定值完全匹配,则此 cmdlet 获取对象。
例如:Get-Process | where ProcessName -Contains "Svchost"
如果属性值包含单个对象,PowerShell 会将其转换为一个对象的集合。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | IContains |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-EQ
指示如果属性值与指定值相同,则此 cmdlet 获取对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | IEQ |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-FilterScript
指定用于筛选对象的脚本块。 将脚本块括在大括号中({})。
可选参数名称,FilterScript。
类型: | ScriptBlock |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-GE
指示如果属性值大于或等于指定值,则此 cmdlet 获取对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | IGE |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-GT
指示如果属性值大于指定值,则此 cmdlet 获取对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | IGT |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-In
指示如果属性值与任何指定值匹配,则此 cmdlet 获取对象。
例如:Get-Process | where -Property ProcessName -in -Value "Svchost", "TaskHost", "WsmProvHost"
如果 Value 参数的值是单个对象,PowerShell 会将其转换为一个对象的集合。
如果对象的属性值是数组,则 PowerShell 使用引用相等性来确定匹配项。
仅当 Where-Object
参数的值和 Value 的任何值是对象实例时, 才返回对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | IIn |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-InputObject
指定要筛选的对象。
还可以通过管道将对象传递给 Where-Object
。
将 InputObject 参数用于 Where-Object
时,Where-Object
值将视为单个对象,而不是将命令结果传递给 。
即使值是命令的结果(如 -InputObject (Get-Process)
),也是如此。
由于 InputObject 无法从数组或对象集合中返回单个属性,因此,如果 Where-Object
筛选那些在定义属性中具有特定值的对象的对象集合,则可以在管道中使用 Where-Object
,如本主题中的示例所示。
类型: | PSObject |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Is
指示如果属性值是指定 .NET Framework 类型的实例,则此 cmdlet 获取对象。 将类型名称括在方括号中。
例如,Get-Process | where StartTime -Is [DateTime]
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-IsNot
指示如果属性值不是指定 .NET Framework 类型的实例,则此 cmdlet 获取对象。
例如,Get-Process | where StartTime -IsNot [DateTime]
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-LE
指示如果属性值小于或等于指定值,则此 cmdlet 获取对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | ILE |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Like
指示如果属性值与包含通配符的值匹配,则此 cmdlet 获取对象。
例如:Get-Process | where ProcessName -Like "*host"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | ILike |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-LT
指示如果属性值小于指定值,则此 cmdlet 获取对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | ILT |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Match
指示如果属性值与指定的正则表达式匹配,则此 cmdlet 获取对象。
当输入为标量时,匹配的值将保存在 $Matches
自动变量中。
例如:Get-Process | where ProcessName -Match "shell"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | IMatch |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-NE
指示如果属性值不同于指定值,则此 cmdlet 获取对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | INE |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-NotContains
指示如果属性值中的项与指定值完全匹配,则此 cmdlet 将获取对象。
例如:Get-Process | where ProcessName -NotContains "Svchost"
NotContains 引用值集合,如果集合不包含与指定值完全匹配的任何项,则为 true。 如果输入是单个对象,PowerShell 会将其转换为一个对象的集合。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | INotContains |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-NotIn
指示如果属性值与任何指定值不完全匹配,则此 cmdlet 获取对象。
例如:Get-Process | where -Value "svchost" -NotIn -Property ProcessName
如果 Value 的值是单个对象,PowerShell 会将其转换为一个对象的集合。
如果对象的属性值是数组,则 PowerShell 使用引用相等性来确定匹配项。
Where-Object
仅当 属性 的值和 值 的值与对象的实例不同时,才会返回该对象。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | INotIn |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-NotLike
指示如果属性值与包含通配符的值不匹配,则此 cmdlet 获取对象。
例如:Get-Process | where ProcessName -NotLike "*host"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | INotLike |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-NotMatch
指示当属性值与指定的正则表达式不匹配时,此 cmdlet 获取对象。
当输入为标量时,匹配的值将保存在 $Matches
自动变量中。
例如:Get-Process | where ProcessName -NotMatch "PowerShell"
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | SwitchParameter |
别名: | INotMatch |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Property
指定对象属性的名称。
参数名称(属性)是可选的。
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-Value
指定属性值。 参数名称(Value)是可选的。 此参数在与以下比较参数一起使用时接受通配符:
- 点击
- CNotLike 类
- 喜欢
- 不喜欢
此参数是在 Windows PowerShell 3.0 中引入的。
类型: | Object |
Position: | 1 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
输入
可以通过管道将对象传递给此 cmdlet。
输出
Object
此 cmdlet 从输入对象集中返回选定的项。
备注
- 从 Windows PowerShell 4.0 开始,添加了用于集合的
Where
和ForEach
方法。- 可以在此处阅读有关这些新方法的详细信息,about_arrays