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>]
Description
Where-Object
Cmdlet 會從傳遞給它的 物件集合中選取具有特定屬性值的物件。
例如,您可以使用 Where-Object
Cmdlet 來選取在特定日期之後建立的檔案、具有特定標識碼的事件,或是使用特定 Windows 版本的電腦。
從 Windows PowerShell 3.0 開始,有兩種不同的方法來建構 Where-Object
命令。
文稿區塊。 您可以使用文稿區塊來指定屬性名稱、比較運算子和屬性值。
Where-Object
會傳回腳本區塊語句為 true 的所有物件。例如,下列命令會取得 Normal 優先順序類別中的進程,也就是處理 PriorityClass 的值 屬性等於 Normal。
Get-Process | Where-Object {$_.PriorityClass -eq "Normal"}
所有 PowerShell 比較運算子都以腳本區塊格式有效。 如需比較運算子的詳細資訊,請參閱 about_Comparison_Operators。
Comparison 語句。 您也可以撰寫比較語句,這更像是自然語言。 比較語句是在 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 的進程。 由於 WorkingSet 屬性的值會以位元組儲存,因此 25,000 的值乘以 1,024。
scriptblock 和語句語法是相等的,而且可以交替使用。
Get-Process | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
範例 3:根據進程名稱取得進程
這些命令會取得具有 ProcessName 屬性值的進程,其開頭為字母 p。 Match 運算子可讓您使用正則表示式比對。
scriptblock 和語句語法是相等的,而且可以交替使用。
Get-Process | Where-Object {$_.ProcessName -Match "^p.*"}
Get-Process | Where-Object ProcessName -Match "^p.*"
範例 4:使用比較語句格式
此範例示範如何使用 Where-Object
Cmdlet 的新比較語句格式。
第一個命令會使用比較語句格式。 在此命令中,不會使用任何別名,而且所有參數都包含參數名稱。
第二個命令是比較命令格式更自然的用法。
,其中 別名會取代 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
命令。
此命令會取得支援可更新說明功能的非核心模組。
此命令會使用 Get-Module
Cmdlet 的 ListAvailable 參數來取得電腦上的所有模組。
管線運算符 (|) 會將模組傳送至 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 會使用參考相等來判斷相符專案。
只有當 Property 參數的值和 Value 的任何值是物件的相同實例時,Where-Object
才會傳回 物件。
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | SwitchParameter |
別名: | IIn |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | False |
-InputObject
指定要篩選的物件。
您也可以使用管線將 物件傳送至 Where-Object
。
當您搭配 Where-Object
使用 InputObject 參數時,InputObject 值會視為單一物件,而不是將命令結果 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 會使用參考相等來判斷相符專案。
此參數是在 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為選擇性。 當搭配下列比較參數使用時,此參數會接受通配符:
- CLike
- CNotLike
- Like
- NotLike
此參數是在 Windows PowerShell 3.0 中引進的。
類型: | Object |
Position: | 1 |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | True |
輸入
您可以使用管線將物件傳送至此 Cmdlet。
輸出
Object
此 Cmdlet 會從輸入物件集傳回選取的專案。
備註
- 從 Windows PowerShell 4.0 開始,已新增
Where
和ForEach
方法來搭配集合使用。- 您可以在這裡深入了解這些新方法 about_arrays