Moduł: Microsoft.PowerShell.Core

Wybiera obiekty z kolekcji na podstawie wartości ich właściwości.

Syntax

Where-Object <String> <Object>] 
Where-Object <ScriptBlock> 
Where-Object <String> <Object>] -Match 
Where-Object <String> <Object>] -CEQ 
Where-Object <String> <Object>] -NE 
Where-Object <String> <Object>] -CNE 
Where-Object <String> <Object>] -GT 
Where-Object <String> <Object>] -CGT 
Where-Object <String> <Object>] -LT 
Where-Object <String> <Object>] -CLT 
Where-Object <String> <Object>] -GE 
Where-Object <String> <Object>] -CGE 
Where-Object <String> <Object>] -LE 
Where-Object <String> <Object>] -CLE 
Where-Object <String> <Object>] -Like 
Where-Object <String> <Object>] -CLike 
Where-Object <String> <Object>] -NotLike 
Where-Object <String> <Object>] -CNotLike 
Where-Object <String> <Object>] -CMatch 
Where-Object <String> <Object>] -NotMatch 
Where-Object <String> <Object>] -CNotMatch 
Where-Object <String> <Object>] -Contains 
Where-Object <String> <Object>] -CContains 
Where-Object <String> <Object>] -NotContains 
Where-Object <String> <Object>] -CNotContains 

.

Where-Object <String> <Object>] -In 
Where-Object <String> <Object>] -CIn 
Where-Object <String> <Object>] -NotIn 
Where-Object <String> <Object>] -CNotIn 
Where-Object <String> <Object>] -Is 
Where-Object <String> <Object>] -IsNot 
Where-Object <String> -Not 

Opis

cmdlet Where-Object wybiera obiekty posiadające określone wartości właściwości z przekazanej mu kolekcji obiektów. Na przykład można użyć polecenia Where-Object do wybrania plików, które zostały utworzone po określonej dacie, zdarzeń o określonym identyfikatorze lub komputerów korzystających z określonej wersji systemu Windows.

Począwszy od wersji Windows PowerShell 3.0, istnieją dwa różne sposoby konstruowania polecenia Where-Object.

  • Blok skryptu. Możesz użyć bloku skryptu do określenia nazwy właściwości, operatora porównania i wartości właściwości. Where-Object zwraca wszystkie obiekty, dla których deklaracja bloku skryptu jest prawdziwa.

    Na przykład poniższe polecenie pobiera procesy w klasie priorytetu Normal, czyli procesy, dla których wartość właściwości PriorityClass jest równa Normal.

    Get-Process | Where-Object {$_.PriorityClass -eq "Normal"}

    Wszystkie operatory porównania PowerShell są ważne w formacie bloku skryptu. Aby uzyskać więcej informacji na temat operatorów porównania, zobaczabout_Comparison_Operators.

  • Konstrukcja porównania. Można również napisać instrukcję porównania, która jest znacznie bardziej podobna do naturalnego języka. Polecenia porównawcze zostały wprowadzone w Windows PowerShell 3.0.

    Na przykład poniższe polecenia pobierają również procesy, które mają klasę priorytetu Normal. Polecenia te są równoważne i mogą być używane zamiennie.

    Get-Process | Where-Object -Property PriorityClass -eq -Value "Normal"

    Get-Process | Where-Object PriorityClass -eq "Normal"

    Począwszy od Windows PowerShell 3.0, Where-Object dodaje operatory porównania jako parametry w poleceniuWhere-Object. Jeśli nie określono inaczej, we wszystkich operatorach nie jest rozróżniana wielkość liter. Przed wersją WindowsPowerShell 3.0 operatory porównania w języku PowerShell mogły być używane tylko w blokach skryptów.

Gdy przekazujesz pojedynczą właściwość do polecenia Where-Object, wartość właściwości jest traktowana jako wyrażenie boolean. Gdy wartość Długość jest różna od zera, wyrażenie jest obliczane jakoTrue. Na przykład: ('hi', '', 'there') | Where-Object Length

Poprzedni przykład jest funkcjonalnie równoważny:

  • ('hi', '', 'there') | Where-Object Length -GT 0
  • ('hi', '', 'there') | Where-Object {$_.Length -gt 0}

Przykłady

Przykład 1: Uzyskaj zatrzymane usługi

Te polecenia uzyskują listę wszystkich usług, które są aktualnie zatrzymane. Zmienna automatyczna $_ reprezentuje każdy obiekt, który jest przekazywany do polecenia Where-Object cmdlet.

Pierwsze polecenie używa formatu bloku skryptu, a drugie formatu deklaracji porównania. Polecenia są równoważne i można ich używać zamiennie.

Get-Service | Where-Object {$_.Status -eq "Stopped"}Get-Service | where Status -eq "Stopped"

Przykład 2: Pobierz procesy na podstawie zestawu roboczego

Te polecenia wyświetlają listę procesów, które mają zestaw roboczy większy niż 250 megabajtów (KB). Składnie scriptblock i statement są równoważne i mogą być używane zamiennie.

Get-Process | Where-Object {$_.WorkingSet -GT 250MB}Get-Process | Where-Object WorkingSet -GT (250MB)

Przykład 3: Pobierz procesy na podstawie nazwy procesu

Te polecenia pobierają procesy, których wartość właściwości ProcessName zaczyna się od litery p. Operator Match pozwala używać dopasowań za pomocą wyrażeń regularnych.

Składnia scriptblock i statement są równoważne i mogą być używane zamiennie.

Get-Process | Where-Object {$_.ProcessName -Match "^p.*"}Get-Process | Where-Object ProcessName -Match "^p.*"

Przykład 4: Użycie formatu deklaracji porównania

Ten przykład pokazuje, jak używać nowego formatu deklaracji porównania cmdleta Where-Object.

Pierwsze polecenie używa formatu polecenia porównania.W tym poleceniu nie są używane aliasy, a wszystkie parametry zawierają nazwę parametru.

Drugie polecenie jest bardziej naturalnym użyciem formatu polecenia porównania. Alias where zastępuje nazwę cmdleta Where-Object, a wszystkie opcjonalne nazwy parametrów są pomijane.

Get-Process | Where-Object -Property Handles -GE -Value 1000Get-Process | where Handles -GE 1000

Przykład 5: Uzyskaj polecenia na podstawie właściwości

Ten przykład pokazuje, jak napisać polecenia, które zwracają elementy, które są prawdziwe lub fałszywe albo mają dowolną wartość dla określonej właściwości. Każdy przykład pokazuje zarówno format bloku skryptu, jak i format instrukcji porównania dla polecenia.

# 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 OutputTypeGet-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 PSIsContainerGet-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

Przykład 6: Użyj wielu warunków

Get-Module -ListAvailable | where {($_.Name -notlike "Microsoft*" -and $_.Name -notlike "PS*") -and $_.HelpInfoUri}

Przykład ten pokazuje, jak utworzyć polecenie Where-Object z wieloma warunkami.

To polecenie pobiera moduły nie rdzeniowe, które obsługują funkcję Updatable Help. Polecenie używa parametruListAvailable polecenia Get-Module cmdlet, aby uzyskać wszystkie moduły na komputerze. Operator Apipeline (|) wysyła moduły do cmdleta Where-Object, który pobiera moduły, których nazwy nie zaczynają się od Microsoft lub PS i mają wartość dla właściwości HelpInfoURI, która mówi PowerShellowi, gdzie znaleźć uaktualnione pliki pomocy dla modułu. Polecenia porównania są połączone operatorem logicznym And.

Przykład wykorzystuje format polecenia bloku skryptu. Operatory logiczne, takie jak And i Or, są ważne tylko w blokach skryptów. Nie można ich używać w formacie instrukcji porównania poleceniaWhere-Object.

  • Aby uzyskać więcej informacji na temat operatorów logicznych PowerShell, zobacz about_Logical_Operators.
  • Aby uzyskać więcej informacji na temat funkcji aktualizowalnej pomocy, zobacz about_Updatable_Help.

Parameters

-CContains

Indicates that this cmdlet gets objects from a collection if the property value of the object is anexact match for the specified value. W tej operacji rozróżniana jest wielkość liter.

Na przykład: Get-Process | where ProcessName -CContains "svchost"

CContains odnosi się do kolekcji wartości i jest prawdziwe, jeśli kolekcja zawiera element, który jest dokładnym dopasowaniem dla podanej wartości. Jeśli dane wejściowe są pojedynczym obiektem, PowerShell konwertuje je na kolekcję jednego obiektu.

Parametr ten został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-CEQ

Indicates that this cmdlet gets objects if the property value is the same as the specified value.W tej operacji rozróżniana jest wielkość liter.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CGE

Indicates that this cmdlet gets objects if the property value is greater or equal to thespecified value. W tej operacji rozróżniana jest wielkość liter.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CGT

Indicates that this cmdlet gets objects if the property value is greater than the specified value.W tej operacji rozróżniana jest wielkość liter.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CIn

Indicates that this cmdlet gets objects if the property value includes the specified value. W tej operacji rozróżniana jest wielkość liter.

Na przykład: Get-Process | where -Value "svchost" -CIn ProcessName

CIn przypomina CContains, z wyjątkiem tego, że pozycje właściwości i wartości są odwrócone. Na przykład, następujące stwierdzenia są prawdziwe.

"abc", "def" -CContains "abc"

"abc" -CIn "abc", "def"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CLE

Indicates that this cmdlet gets objects if the property value is less-than or equal to the specifiedvalue. W tej operacji rozróżniana jest wielkość liter.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CLike

Indicates that this cmdlet gets objects if the property value matches a value that includes wildcardcharacters. W tej operacji rozróżniana jest wielkość liter.

Na przykład: Get-Process | where ProcessName -CLike "*host"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CLT

Indicates that this cmdlet gets objects if the property value is less-than the specified value. W tej operacji rozróżniana jest wielkość liter.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-CMatch

Indicates that this cmdlet gets objects if the property value matches the specified regularexpression. W tej operacji rozróżniana jest wielkość liter. Gdy dane wejściowe są skalarne, dopasowana wartość jest zapisywana w $Matches zmiennej automatycznej.

Na przykład: Get-Process | where ProcessName -CMatch "Shell"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CNE

Indicates that this cmdlet gets objects if the property value is different than the specified value.W tej operacji rozróżniana jest wielkość liter.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CNotContains

Indicates that this cmdlet gets objects if the property value of the object is not an exact matchfor the specified value. W tej operacji rozróżniana jest wielkość liter.

Na przykład: Get-Process | where ProcessName -CNotContains "svchost"

NotContains i CNotContains odnoszą się do kolekcji wartości i są prawdziwe, gdy kolekcja nie zawiera żadnych elementów, które są dokładnym dopasowaniem dla podanej wartości. Jeśli dane wejściowe są pojedynczym obiektem, PowerShell konwertuje je na kolekcję jednego obiektu.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CNotIn

Indicates that this cmdlet gets objects if the property value is not an exact match for thespecified value. W tej operacji rozróżniana jest wielkość liter.

Na przykład: Get-Process | where -Value "svchost" -CNotIn -Property ProcessName

Operatory NotIn i CNotIn przypominają operatory NotContains i CNotContains, z tym że pozycje właściwości i wartości są odwrócone. Na przykład, następujące stwierdzenia są prawdziwe.

"abc", "def" -CNotContains "Abc"

"abc" -CNotIn "Abc", "def"

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-CNotLike

Indicates that this cmdlet gets objects if the property value does not match a value that includeswildcard characters. W tej operacji rozróżniana jest wielkość liter.

Na przykład: Get-Process | where ProcessName -CNotLike "*host"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-CNotMatch

Indicates that this cmdlet gets objects if the property value does not match the specified regularexpression. W tej operacji rozróżniana jest wielkość liter. Gdy dane wejściowe są skalarne, dopasowana wartość jest zapisywana w $Matches zmiennej automatycznej.

Na przykład: Get-Process | where ProcessName -CNotMatch "Shell"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-Contains

Indicates that this cmdlet gets objects if any item in the property value of the object is an exactmatch for the specified value.

Na przykład: Get-Process | where ProcessName -Contains "Svchost"

Jeśli wartość właściwości zawiera pojedynczy obiekt, PowerShell konwertuje ją na kolekcję jednegoobiektu.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: IContains
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-EQ

Indicates that this cmdlet gets objects if the property value is the same as the specified value.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: IEQ
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-FilterScript

Określa blok skryptu, który jest używany do filtrowania obiektów. Blok skryptu należy zamknąć w nawiasach klamrowych({}).

Nazwa parametru, FilterScript, jest opcjonalna.

Type: ScriptBlock
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-GE

Indicates that this cmdlet gets objects if the property value is greater or equal to thespecified value.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: IGE
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-GT

Indicates that this cmdlet gets objects if the property value is greater than the specified value.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: IGT
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-In

Indicates that this cmdlet gets objects if the property value matches any of the specified values.Na przykład:

Get-Process | where -Property ProcessName -in -Value "Svchost", "TaskHost", "WsmProvHost"

Jeśli wartość parametru Value jest pojedynczym obiektem, PowerShell konwertuje ją na kolekcję jednego obiektu.

Jeśli wartość właściwości obiektu jest tablicą, PowerShell używa równości referencji do określenia dopasowania. Where-Object zwraca obiekt tylko wtedy, gdy wartość parametru Property i dowolna wartość Value są tą samą instancją obiektu.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: IIn
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-InputObject

Określa obiekty, które mają być filtrowane. Możesz również przekazać obiekty do Where-Object.

Gdy używasz parametru InputObject z Where-Object, zamiast przekazywać wyniki polecenia doWhere-Object, wartość InputObject jest traktowana jako pojedynczy obiekt. Jest to prawdą nawet jeśli wartość jest kolekcją będącą wynikiem polecenia, jak -InputObject (Get-Process). Ponieważ funkcja InputObject nie może zwracać poszczególnych właściwości z tablicy lub kolekcji obiektów, zalecamy, aby w przypadku użycia Where-Object do filtrowania kolekcji obiektów w celu znalezienia tych obiektów, które mają określone wartości w zdefiniowanych właściwościach, użyć Where-Object w potoku, jak pokazano w przykładach w tym temacie.

Type: PSObject
Position: Named
Default value: None
Accept pipeline input: True
Accept wildcard characters: False
-Is

Indicates that this cmdlet gets objects if the property value is an instance of the specified .NETtype. Otocz nazwę typu nawiasami kwadratowymi.

Na przykład Get-Process | where StartTime -Is

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-IsNot

Indicates that this cmdlet gets objects if the property value is not an instance of the specified.NET type.

Na przykład Get-Process | where StartTime -IsNot

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-LE

Indicates that this cmdlet gets objects if the property value is less than or equal to the specifiedvalue.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: ILE
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-Like

Indicates that this cmdlet gets objects if the property value matches a value that includes wildcardcharacters.

Na przykład: Get-Process | where ProcessName -Like "*host"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: ILike
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-LT

Indicates that this cmdlet gets objects if the property value is less than the specified value.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: ILT
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-Match

Indicates that this cmdlet gets objects if the property value matches the specified regularexpression. Gdy dane wejściowe są skalarne, dopasowana wartość jest zapisywana w $Matcheszmiennej automatycznej.

Na przykład: Get-Process | where ProcessName -Match "shell"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: IMatch
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-NE

Indicates that this cmdlet gets objects if the property value is different than the specified value.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: INE
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-Not

Indicates that this cmdlet gets objects if the property does not exist or has a value of null orfalse.

Na przykład: Get-Service | where -Not "DependentServices"

Ten parametr został wprowadzony w Windows PowerShell 6.1.

Type: SwitchParameter
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-NotContains

Indicates that this cmdlet gets objects if none of the items in the property value is an exact matchfor the specified value.

Na przykład: Get-Process | where ProcessName -NotContains "Svchost"

NotContains odnosi się do kolekcji wartości i ma wartość true, jeśli kolekcja nie zawiera anyitems, które są dokładnym dopasowaniem dla określonej wartości. Jeśli dane wejściowe są pojedynczym obiektem, PowerShell konwertuje je na kolekcję jednego obiektu.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: INotContains
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-NotIn

Indicates that this cmdlet gets objects if the property value is not an exact match for any of thespecified values.

Na przykład: Get-Process | where -Value "svchost" -NotIn -Property ProcessName

Jeśli wartość Value jest pojedynczym obiektem, PowerShell konwertuje ją na kolekcję jednego obiektu.

Jeśli wartość właściwości obiektu jest tablicą, PowerShell używa równości referencji do określenia dopasowania. Where-Object zwraca obiekt tylko wtedy, gdy wartość Property i dowolna wartośćValue nie są tą samą instancją obiektu.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: INotIn
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-NotLike

Indicates that this cmdlet gets objects if the property value does not match a value that includeswildcard characters.

Na przykład: Get-Process | where ProcessName -NotLike "*host"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Typ: SwitchParameter
Alias: INotLike
Pozycja: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-NotMatch

Indicates that this cmdlet gets objects when the property value does not match the specified regularexpression. Gdy dane wejściowe są skalarne, dopasowana wartość jest zapisywana w $Matcheszmiennej automatycznej.

Na przykład: Get-Process | where ProcessName -NotMatch "PowerShell"

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: SwitchParameter
Aliases: INotMatch
Position: Named
Wartość domyślna: None
Accept pipeline input: False
Accept wildcard characters: False
-Property

Określa nazwę właściwości obiektu. Nazwa parametru, Property, jest opcjonalna.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: String
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-Value

Określa wartość właściwości. Nazwa parametru, Value, jest opcjonalna. Ten parametr akceptuje znaki wieloznaczne, gdy jest używany z następującymi parametrami porównania:

  • CLike
  • CNotLike
  • Like
  • NotLike

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type: Object
Position: 1
Default value: None
Accept pipeline input: False
Accept wildcard characters: True

Inputs

PSObject

Do tego cmdleta można przesyłać obiekty rurociągiem.

Outputs

Object

Ten cmdlet zwraca wybrane elementy ze zbioru obiektów wejściowych.

Notes

Począwszy od Windows PowerShell 4.0, dodano metody Where i ForEach do użycia z kolekcjami.

Możesz przeczytać więcej o tych nowych metodach tutaj about_arrays

  • Compare-Object
  • ForEach-Object
  • Group-Object
  • Measure-Object
  • New-Object
  • Select-Object
  • Sort-Object
  • Tee-Object

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.