Como Usar o Comando Where-Object no PowerShell

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

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' }
Nota
Muitas pessoas usam parâmetros posicionais com o cmdlet 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
Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artigo relacionado - PowerShell Statement