Seleciona objetos de uma coleção com base em seus valores de propriedade.
- Sintaxe
- Descrição
- Exemplos
- Exemplo 1: Obter serviços parados
- Exemplo 2: Obter processos baseados no conjunto de trabalho
- Exemplo 3: Obter processos baseados no nome do processo
- Exemplo 4: Use o formato de declaração de comparação
- Exemplo 5: Obter comandos baseados em propriedades
- Exemplo 6: Use múltiplas condições
- Parâmetros
- Entradas
- Entradas
- Notas
Sintaxe
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
Descrição
O Where-Object
cmdlet selecciona objectos que têm valores de propriedade particulares a partir da colecção de objectos que lhe são passados. Por exemplo, você pode usar o Where-Object
cmdlet para selecionar arquivos que foram criados após uma determinada data, eventos com um determinado ID, ou computadores que usam uma versão aparticular do Windows.
Iniciar no Windows PowerShell 3.0, há duas maneiras diferentes de construir um bloco Where-Object
command.
-
Script. Você pode usar um bloco de script para especificar o nome da propriedade, um operador de comparação, e um valor da propriedade.
Where-Object
retorna todos os objetos para os quais a declaração do bloco de script é verdadeira.Por exemplo, o seguinte comando obtém processos na classe de prioridade Normal, ou seja, processos onde o valor da propriedade PriorityClass é igual a Normal.
Get-Process | Where-Object {$_.PriorityClass -eq "Normal"}
Todos os operadores de comparação PowerShell são válidos no formato do bloco de script. Para mais informações sobre os operadores de comparação, veja sobre os operadores de comparação_Comparação.
-
Comparação. Você também pode escrever uma declaração de comparação, que é muito mais parecida com uma linguagem natural. As instruções de comparação foram introduzidas no Windows PowerShell 3.0.
Por exemplo, os seguintes comandos também obtêm processos que têm uma classe de prioridade de Normal. Estes comandos são equivalentes e podem ser usados alternadamente.
Get-Process | Where-Object -Property PriorityClass -eq -Value "Normal"
Get-Process | Where-Object PriorityClass -eq "Normal"
Iniciar no Windows PowerShell 3.0,
Where-Object
adiciona operadores de comparação como parâmetros em um comandoWhere-Object
. A menos que especificado, todos os operadores são insensíveis a maiúsculas e minúsculas. Antes do Windows PowerShell 3.0, os operadores de comparação na linguagem PowerShell só podiam ser usados em blocos de script.
Quando você fornece uma única propriedade para Where-Object
, o valor da propriedade é tratado como expressão booleana asa. Quando o valor de Length não é zero, a expressão é avaliada paraTrue. Por exemplo: ('hi', '', 'there') | Where-Object Length
O exemplo anterior é funcionalmente equivalente a:
('hi', '', 'there') | Where-Object Length -GT 0
('hi', '', 'there') | Where-Object {$_.Length -gt 0}
Exemplos
Exemplo 1: Obter serviços parados
Estes comandos obtêm uma lista de todos os serviços que estão atualmente parados. O $_
variablereatura automática representa cada objeto que é passado para o Where-Object
cmdlet.
O primeiro comando usa o formato de bloco de script, o segundo comando usa o formato de comparação de statementformat. Os comandos são equivalentes e podem ser usados intercambiavelmente.
Get-Service | Where-Object {$_.Status -eq "Stopped"}Get-Service | where Status -eq "Stopped"
Exemplo 2: Obter processos baseados no conjunto de trabalho
Estes comandos listam processos que têm um conjunto de trabalho maior que 250 megabytes (KB). Thescriptblock e sintaxe de comandos são equivalentes e podem ser usados alternadamente.
Get-Process | Where-Object {$_.WorkingSet -GT 250MB}Get-Process | Where-Object WorkingSet -GT (250MB)
Exemplo 3: Obter processos baseados no nome do processo
Estes comandos obtêm os processos que têm um valor de propriedade ProcessName que começa com a letra p
. O operador Match permite que você use expressões regulares match.
O scriptblock e a sintaxe do comando são equivalentes e podem ser usados intercambiavelmente.
Get-Process | Where-Object {$_.ProcessName -Match "^p.*"}Get-Process | Where-Object ProcessName -Match "^p.*"
Exemplo 4: Use o formato de declaração de comparação
Este exemplo mostra como usar o novo formato de declaração de comparação do arquivo Where-Object
cmdlet.
O primeiro comando usa o formato da instrução de comparação. Neste comando, nenhum apelido é usado e todos os parâmetros incluem o nome do parâmetro.
O segundo comando é o uso mais natural do formato da instrução de comparação. O where
alias issubstituted para o Where-Object
cmdlet name e todos os nomes de parâmetros opcionais são omitidos.
Get-Process | Where-Object -Property Handles -GE -Value 1000Get-Process | where Handles -GE 1000
Exemplo 5: Obter comandos baseados em propriedades
Este exemplo mostra como escrever comandos que retornam itens que são verdadeiros ou falsos ou que têm algum valor para uma propriedade especificada. Cada exemplo mostra tanto o bloco de script quanto o formato de declaração de comparação do comando.
# 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
Exemplo 6: Use múltiplas condições
Get-Module -ListAvailable | where {($_.Name -notlike "Microsoft*" -and $_.Name -notlike "PS*") -and $_.HelpInfoUri}
Este exemplo mostra como criar um comando Where-Object
com múltiplas condições.
Este comando obtém módulos não essenciais que suportam o recurso Updatable Help. O comando usa o parâmetroListAvailable do parâmetro Get-Module
cmdlet para obter todos os módulos no computador. O operador do Apipeline (|
) envia os módulos para o comando Where-Object
cmdlet, que obtém módulos cujos nomes não começam com Microsoft ou PS, e tem um valor para a propriedade HelpInfoURI, que diz PowerShell onde encontrar arquivos de ajuda atualizados para o módulo. As instruções de comparação são ligadas pelo operador And logical operator.
O exemplo usa o formato de comando de bloco de script. Os operadores lógicos, como And e Or, são válidos somente em blocos de scripts. Você não pode usá-los no formato de declaração de comparação de um comandoWhere-Object
comando.
- Para mais informações sobre os operadores lógicos PowerShell, veja about_Logical_Operators.
- Para mais informações sobre o recurso Updatable Help, veja about_Updatable_Help.
Parâmetros
Indica que este cmdlet obtém objetos de uma coleção se o valor da propriedade do objeto for compatível com o valor especificado. Esta operação é sensível a maiúsculas e minúsculas.
Por exemplo: Get-Process | where ProcessName -CContains "svchost"
CContains refere-se a uma coleção de valores e é verdadeiro se a coleção contém um item que é exatamente igual ao valor especificado. Se o input for um único objeto, PowerShell o converte para uma coleção de um objeto.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for o mesmo que o valor especificado.Esta operação é sensível a maiúsculas e minúsculas.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for maior ou igual ao valor especificado. Esta operação é sensível a maiúsculas e minúsculas.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for maior que o valor especificado.Esta operação é sensível a maiúsculas e minúsculas.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade incluir o valor especificado. Esta operação é sensível a maiúsculas e minúsculas.
Por exemplo: Get-Process | where -Value "svchost" -CIn ProcessName
CIn se assemelha ao CContains, exceto que as posições da propriedade e do valor são invertidas. Forexample, as seguintes afirmações são ambas verdadeiras.
"abc", "def" -CContains "abc"
"abc" -CIn "abc", "def"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for inferior ou igual ao valor especificado. Esta operação é sensível a maiúsculas e minúsculas.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade corresponder a um valor que inclui caracteres curinga. Esta operação é sensível a maiúsculas e minúsculas.
Por exemplo: Get-Process | where ProcessName -CLike "*host"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for inferior ao valor especificado. Esta operação é sensível a maiúsculas e minúsculas.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade corresponder à expressão regular especificada. Esta operação é sensível a maiúsculas e minúsculas. Quando a entrada é escalar, o valor correspondente é salvo em $Matches
variável automática.
Por exemplo: Get-Process | where ProcessName -CMatch "Shell"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for diferente do valor especificado.Esta operação é sensível a maiúsculas e minúsculas.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade do objecto não corresponder exactamente ao valor especificado. Esta operação é sensível a maiúsculas e minúsculas.
Por exemplo: Get-Process | where ProcessName -CNotContains "svchost"
NotContains e CNotContains referem-se a uma coleção de valores e são verdadeiros quando a coleção não contém nenhum item que seja uma correspondência exata para o valor especificado. Se o inputis for um único objeto, o PowerShell o converte para uma coleção de um objeto.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade não corresponder exactamente ao valor especificado. Esta operação é sensível a maiúsculas e minúsculas.
Por exemplo: Get-Process | where -Value "svchost" -CNotIn -Property ProcessName
NotIn e operadores CNotIn assemelham-se a NotContains e CNotContains, excepto que a propriedade e as posições de valor são invertidas. Por exemplo, as seguintes afirmações são verdadeiras.
"abc", "def" -CNotContains "Abc"
"abc" -CNotIn "Abc", "def"
Indica que este cmdlet obtém objectos se o valor da propriedade não corresponder a um valor que inclua caracteres wildcard. Esta operação é sensível a maiúsculas e minúsculas.
Por exemplo: Get-Process | where ProcessName -CNotLike "*host"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade não corresponder à expressão regular especificada. Esta operação é sensível a maiúsculas e minúsculas. Quando a entrada é escalar, o valor correspondente é salvo em $Matches
variável automática.
Por exemplo: Get-Process | where ProcessName -CNotMatch "Shell"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet obtém objectos se qualquer item no valor da propriedade do objecto for um valor exacto para o valor especificado.
Por exemplo: Get-Process | where ProcessName -Contains "Svchost"
Se o valor da propriedade contém um único objecto, o PowerShell converte-o para uma colecção de um objecto.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for o mesmo que o valor especificado.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Escreve o bloco de script que é usado para filtrar os objectos. Feche o bloco de script entre chaves({}
).
O nome do parâmetro, FilterScript, é opcional.
Indica que este cmdlet recebe objectos se o valor da propriedade for maior ou igual ao valor especificado.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for maior que o valor especificado.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade corresponder a algum dos valores especificados.Por exemplo:
Get-Process | where -Property ProcessName -in -Value "Svchost", "TaskHost", "WsmProvHost"
Se o valor do parâmetro Value for um único objeto, PowerShell o converte para uma coleção de um objeto.
Se o valor da propriedade de um objeto for um array, PowerShell usa igualdade de referência para determinar o amatch. Where-Object
retorna o objeto somente se o valor do parâmetro Propriedade e qualquer valor de Valor forem a mesma instância de um objeto.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
>
Especifica os objectos a filtrar. Você também pode pipear os objetos para Where-Object
.
Quando você usa o parâmetro InputObject com Where-Object
, ao invés de pipear os resultados do comando paraWhere-Object
, o valor do InputObject é tratado como um único objeto. Isto é verdade mesmo que o valor seja uma coleção que é o resultado de um comando, como -InputObject (Get-Process)
. Como oInputObject não pode retornar propriedades individuais de um array ou coleção de objetos, recomenda-se que, se você usar Where-Object
para filtrar uma coleção de objetos para aqueles objetos que possuem valores específicos em propriedades definidas, você use Where-Object
no pipeline, como mostrado nos exemplos neste tópico.
Indica que este cmdlet recebe objectos se o valor da propriedade for uma instância do especificado .NET especificado. Coloque o nome do tipo entre colchetes.
Por exemplo, Get-Process | where StartTime -Is
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade não for uma instância do especificado.NET type.
Por exemplo, Get-Process | where StartTime -IsNot
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for menor ou igual ao valor especificado.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade corresponder a um valor que inclui caracteres curinga.
Por exemplo: Get-Process | where ProcessName -Like "*host"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for inferior ao valor especificado.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade corresponder à expressão regular especificada. Quando a entrada é escalar, o valor correspondente é salvo em $Matches
variável automática.
Por exemplo: Get-Process | where ProcessName -Match "shell"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade for diferente do valor especificado.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se a propriedade não existir ou tiver um valor de null orfalse.
Por exemplo: Get-Service | where -Not "DependentServices"
Este parâmetro foi introduzido no Windows PowerShell 6.1.
Indica que este cmdlet recebe objectos se nenhum dos itens no valor da propriedade for exactamente igual ao valor especificado.
Por exemplo: Get-Process | where ProcessName -NotContains "Svchost"
NotContains refere-se a uma coleção de valores e é verdadeiro se a coleção não contém nenhum item que seja exatamente igual ao valor especificado. Se o input é um único objecto, o PowerShellconverte-o para uma colecção de um objecto.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade não corresponder exactamente a nenhum dos valores especificados.
Por exemplo: Get-Process | where -Value "svchost" -NotIn -Property ProcessName
Se o valor de Valor é um único objeto, PowerShell o converte para uma coleção de um objeto.
Se o valor da propriedade de um objeto é um array, PowerShell usa igualdade de referência para determinar o amatch. Where-Object
retorna o objeto somente se o valor da propriedade e qualquer valor deValor não for a mesma instância de um objeto.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos se o valor da propriedade não corresponder a um valor que inclua caracteres wildcard.
Por exemplo: Get-Process | where ProcessName -NotLike "*host"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Indica que este cmdlet recebe objectos quando o valor da propriedade não corresponde à expressão regular especificada. Quando a entrada é escalar, o valor correspondente é salvo em $Matches
variável automática.
Por exemplo: Get-Process | where ProcessName -NotMatch "PowerShell"
Este parâmetro foi introduzido no Windows PowerShell 3.0.
>
Especifica o nome de uma propriedade de objecto. O nome do parâmetro, Propriedade, é opcional.
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Especifica um valor de propriedade. O nome do parâmetro, Valor, é opcional. Este parâmetro aceita caracteresildcard quando usado com os seguintes parâmetros de comparação:
- CLike
- CNotLike
- Like
- NotLike
Este parâmetro foi introduzido no Windows PowerShell 3.0.
Entradas
PSObjecto
Pode canalizar os objectos para esta cmdlet.
Entradas
Objecto
Este cmdlet retorna itens seleccionados do conjunto de objectos de entrada.
Notas
Iniciar no Windows PowerShell 4.0, Where
e ForEach
métodos foram adicionados para uso com colecções.
Pode ler mais sobre estes novos métodos aqui sobre_arrays
- Compare-Objecto
- ParaEach-Objecto
- Grupo-Objeto
- Medida-Objeto
- Novo Objeto
- Seleto-Objeto
- Sort-Objeto
- Tee-Objeto