ForEach-Object aninhado e Where-Object no PowerShell

  1. Use o cmdlet Where-Object no PowerShell
  2. Use o cmdlet ForEach-Object no PowerShell
  3. Use ForEach-Object e Where-Object Aninhados no PowerShell
  4. Use ForEach-Object e Where-Object Aninhados Com Declarações if no PowerShell
  5. Conclusão
ForEach-Object aninhado e Where-Object no PowerShell

Os cmdlets Where-Object e ForEach-Object do PowerShell são ferramentas indispensáveis para filtrar e processar dados de maneira sistemática e eficiente. Ao aproveitar o poder desses cmdlets, os usuários do PowerShell podem manipular conjuntos de dados com precisão e facilidade, realizando ações com base em condições específicas e iterando sobre coleções sem esforço.

Este artigo elucida o uso de Where-Object e ForEach-Object, demonstrando como eles podem ser empregados individualmente e em conjunto para realizar várias tarefas. Desde filtrar serviços do Windows até realizar cálculos sobre dados numéricos e até mesmo implementar operações aninhadas para cenários mais complexos, esses cmdlets oferecem uma estrutura robusta para manipulação de dados em scripts do PowerShell.

Use o cmdlet Where-Object no PowerShell

O Where-Object é um cmdlet embutido que filtra a saída do comando e mostra as informações que você deseja ver. Geralmente, o Where-Object funciona como um filtro.

Ele também permite que você crie condições que podem retornar verdadeiro ou falso.

No exemplo abaixo, encontraremos todos os serviços que estão em execução em nosso computador no modo automático. O comando para esse propósito é algo como o seguinte:

Get-Service | Where-Object -FilterScript { $_.StartType -EQ 'Automatic' }

Neste trecho de código, começamos recuperando uma coleção de serviços do Windows usando o cmdlet Get-Service. Esta coleção é então passada para o cmdlet Where-Object, onde um script de filtro é aplicado a cada objeto de serviço na pipeline.

Dentro do script de filtro, avaliamos a propriedade StartType de cada objeto de serviço para determinar se é igual à string "Automatic". Se a propriedade StartType de um serviço corresponder a esse critério, ele é passado para a pipeline.

Este script de filtro efetivamente seleciona apenas aqueles serviços que têm seu tipo de inicialização definido como "Automatic". O resultado dessa operação de filtragem é um subconjunto da coleção original de serviços, contendo apenas os serviços configurados para iniciar automaticamente.

Após executar a linha de comando acima, você obterá uma saída como a abaixo:

powershell foreach-object aninhado where-object - saída 1

Use o cmdlet ForEach-Object no PowerShell

O ForEach-Object permitirá que você execute uma tarefa específica para cada objeto especificado. No nosso exemplo abaixo, dividiremos cada objeto por 1024.

O código para nosso exemplo será como o seguinte:

3000, 567980, 112432 | ForEach-Object -Process { $_ / 1024 }

Neste trecho de código, iteramos sobre uma coleção de três números: 3000, 567980 e 112432 usando o cmdlet ForEach-Object. Dentro do bloco de script, realizamos um cálculo em cada número dividindo-o por 1024.

Este cálculo é executado para cada número na coleção individualmente. Como resultado, obtemos uma nova coleção contendo os resultados da operação de divisão, onde cada número da coleção original foi dividido por 1024.

Após executar a linha de comando acima, você obterá uma saída conforme mostrado abaixo:

powershell foreach-object aninhado where-object - saída 2

Use ForEach-Object e Where-Object Aninhados no PowerShell

A combinação dos cmdlets ForEach-Object e Where-Object permite operações poderosas de manipulação e filtragem de dados. A abordagem aninhada, onde um cmdlet é usado dentro do escopo de outro, aumenta a capacidade de processar dados de forma iterativa e seletiva.

Este método é particularmente útil ao lidar com arrays ou coleções de objetos e precisar realizar ações com base em critérios específicos.

Exemplo:

$MyArray = ("python", "explorer", "edge")
$MyArray | ForEach-Object { Get-Process | Where-Object ProcessName -EQ $_ | Out-Host }

Neste trecho de código, $MyArray contém uma lista de nomes de processos. O cmdlet ForEach-Object itera sobre cada nome de processo no array.

Dentro do bloco de script, Get-Process recupera informações sobre todos os processos em execução, e Where-Object filtra esses processos com base na condição de que a propriedade ProcessName corresponda ao nome de processo atual ($_). Os objetos de processo filtrados são então enviados para a saída do console usando Out-Host.

Saída:

powershell foreach-object aninhado onde-objeto - saída 3

Use ForEach-Object e Where-Object Aninhados Com Declarações if no PowerShell

Na script do PowerShell, declarações if aninhadas fornecem uma maneira de aplicar lógica condicional dentro de loops e outras estruturas de controle. Quando combinadas com os cmdlets ForEach-Object e Where-Object, as declarações if aninhadas possibilitam operações complexas de filtragem e processamento de dados.

Este método oferece flexibilidade e granularidade no tratamento de dados com base em múltiplos critérios. É particularmente útil para cenários onde um controle detalhado sobre a manipulação de dados é necessário.

Exemplo:

$MyArray = @("Value1", "Value2", "Value3")
$MyArray | ForEach-Object {
    if ($_ | Where-Object { $_ -eq "Value1" -or $_ -eq "Value3" }) {
        $_ | Out-Host
    }
}

Neste trecho de código, $MyArray contém uma lista de valores. O cmdlet ForEach-Object itera sobre cada valor no array.

Dentro da declaração if aninhada, Where-Object filtra os valores com base na condição de que sejam iguais a "Value1" ou "Value3".

Se a condição for atendida, o valor é enviado para o console usando Out-Host.

Saída:

powershell foreach-object aninhado where-object - saída 4

Conclusão

Com seus cmdlets versáteis, como Where-Object e ForEach-Object, o PowerShell capacita os usuários a manusear capacidades complexas de processamento de dados com finesse. Seja selecionando elementos específicos de uma coleção, aplicando lógica condicional ou executando tarefas em cada item de forma iterativa, o PowerShell fornece as ferramentas necessárias para otimizar o fluxo de trabalho e aumentar a produtividade.

Ao dominar esses cmdlets e entender suas nuances, os usuários podem aproveitar todo o potencial do PowerShell para manipulação eficiente de dados e tarefas de script, desbloqueando um mundo de possibilidades em automação e administração.

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
MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

Artigo relacionado - PowerShell Object