Como Usar o Comando Where-Object no PowerShell
-
o Cmdlet
Where-Object
no PowerShell - Criando Condições de Filtro com Blocos de Script no PowerShell
-
Usando
Where-Object
para Filtrar Objetos no PowerShell - Criando Condições de Filtro com Parâmetros no PowerShell
- Usando Múltiplas Declarações Condicionais

Quando você trabalha com propriedades do Windows PowerShell em uma coleção de objetos, às vezes você precisará de uma maneira de filtrar todas as coisas específicas que você realmente precisa. Portanto, saber como usar o cmdlet Where-Object
do Windows PowerShell é uma técnica vital a ter em seu conjunto de habilidades do Windows PowerShell.
O cmdlet Where-Object
é um comando valioso para filtrar objetos. Neste artigo, aprenderemos várias maneiras de construir um comando Where-Object
, sua sintaxe e o uso de múltiplas declarações condicionais.
o Cmdlet Where-Object
no PowerShell
O único objetivo do cmdlet Where-Object
do Windows PowerShell é filtrar a saída de um comando e retornar informações específicas que queremos imprimir.
Em resumo, o cmdlet Where-Object
é um filtro. Ele nos permite construir uma condição que retorna True
ou False
. Dependendo do resultado da situação, o cmdlet então retorna ou não a saída.
Você pode elaborar essa condição de duas maneiras: blocos de script e parâmetros.
Criando Condições de Filtro com Blocos de Script no PowerShell
Blocos de script são um componente vital no Windows PowerShell. Eles são usados em centenas de lugares ao longo da linguagem de script. Um bloco de script é uma função anônima que categoriza código e o executa em vários lugares.
Exemplo de Bloco de Script:
{$_.StartType -EQ 'Automatic'}
Usando o pipeline do Windows PowerShell, você pode então canalizar esses objetos para o cmdlet Where-Object
e usar o parâmetro FilterScript
. Como o parâmetro FilterScript
aceita um bloco de script, podemos criar uma condição para verificar se a propriedade de cada objeto é igual ao valor específico, como no exemplo abaixo.
Exemplo de Código:
Get-Service | Where-Object -FilterScript { $_.StartType -eq 'Automatic' }
Where-Object
e não incluem o nome do parâmetro FilterScript
. Em vez disso, elas fornecem o bloco de script sozinho, como Where-Object {$_.StartType -eq 'Automatic'}
para uma maneira mais rápida e limpa de scriptar.Enquanto esse tipo de sintaxe funciona para este cenário particular, o conceito de um bloco de script com chaves ({}
) torna o código menos legível e mais difícil para usuários menos experientes do Windows PowerShell. Este problema de legibilidade fez com que a equipe do Windows PowerShell introduzisse parâmetros.
Usando Where-Object
para Filtrar Objetos no PowerShell
O Get-ChildItem
obtém a lista de todos os arquivos e pastas em um local especificado. Vamos considerar que você deseja exibir apenas os arquivos .csv
no diretório.
O exemplo a seguir mostra como usar o cmdlet Where-Object
para filtrar e selecionar apenas arquivos .csv
.
Get-ChildItem | Where-Object { $_.extension -eq ".csv" }
No script acima, a saída do Get-ChildItem
é canalizada para o cmdlet Where-Object
. O Where-Object
filtra a saída onde a extensão do arquivo é .csv
.
Saída:
Directory: C:\Users\rhntm
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/11/2022 7:57 AM 122 books.csv
-a---- 3/8/2022 2:07 PM 780199 house_data.csv
-a---- 3/8/2022 10:38 PM 421 play_tennis.csv
Você também pode usar Where
como um alias para o cmdlet Where-Object
.
Abaixo está outro exemplo que filtra a lista de processos com o valor da propriedade ProcessName
. Ele exibe apenas processos que possuem spotify
como ProcessName
.
Get-Process | where { $_.ProcessName -in "spotify" }
Saída:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
550 31 55036 71256 2.81 1820 3 Spotify
294 21 12328 18144 0.06 13536 3 Spotify
476 64 96012 141208 20.61 13980 3 Spotify
Você pode usar o operador -notin
para selecionar valores que não estão na coleção de objetos.
Por exemplo, o exemplo a seguir imprime todos os processos que não têm spotify
como ProcessName
.
Get-Process | where { $_.ProcessName -notin "spotify" }
Dessa forma, você pode usar o cmdlet Where-Object
para filtrar os objetos da coleção de objetos com base nos valores de suas propriedades.
Criando Condições de Filtro com Parâmetros no PowerShell
Introduzidos no Windows PowerShell 3.0, os parâmetros têm um fluxo mais natural em como são escritos. Usando o mesmo exemplo anterior, vamos usar parâmetros para filtrar uma saída específica.
Exemplo de Código:
Get-Service | Where-Object -Property StartType -EQ 'Automatic'
Observe acima que, em vez de usar um bloco de script, o comando especifica a propriedade do objeto como um valor de parâmetro para o parâmetro Property. Além disso, o operador -eq
é agora um parâmetro, permitindo que você passe o valor Automatic
para ele.
Usar parâmetros dessa maneira agora elimina a necessidade de um bloco de script. No entanto, embora a Microsoft tenha introduzido parâmetros como uma maneira mais limpa de scriptar, temos uma excelente razão para usar blocos de script que discutiremos na próxima seção do artigo.
Usando Múltiplas Declarações Condicionais
Você pode combinar duas ou mais condições utilizando um operador (como -and
ou -or
) para avaliá-las usando um bloco de script. No entanto, precisamos usar um componente específico do Windows PowerShell chamado subexpressões para avaliar cada condição com sucesso.
No Windows PowerShell, podemos usar subexpressões para executar uma expressão dentro de uma sintaxe de filtragem como Where-Object
. Fazemos isso envolvendo qualquer declaração condicional que executamos com parênteses (()
).
Exemplo de Código:
Get-Process | Where-Object { ($_.CPU -gt 2.0) -and ($_.CPU -lt 10) }
Exemplo de Bloco de Script:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------ - ------ ---- - ---- - ------ -- -- ---------- -
334 21 18972 26384 5.23 3808 0 AnyDesk
635 34 13304 51264 9.56 4140 5 notepad
726 36 12820 51196 4.69 12088 5 notepad
802 46 18356 65088 7.98 10784 5 OneDrive
340 18 6472 26436 3.44 1252 5 RuntimeBroker
698 34 14672 44484 3.63 3284 5 RuntimeBroker
323 19 5732 23432 4.00 11200 5 RuntimeBroker
560 18 6440 27752 4.63 8644 5 sihost
632 31 21524 69972 2.81 6392 5 StartMenuExperienceHost
390 18 9756 30832 3.94 3084 5 svchost
523 24 8768 36312 2.17 6300 5 svchost
524 17 6416 21036 4.42 10932 5 SynTPEnh
525 22 15336 38904 3.41 2192 5 TextInputHost
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn