Ao trabalhar com o PowerShell, há momentos em que você precisa trabalhar com conjuntos de dados. Trabalhamos com muitos arquivos, contas de usuário, máquinas virtuais e muito mais. Quando você exibe esses diversos objetos no console, os objetos são exibidos na tela um após o outro, sem considerar como você gostaria de vê-los. Mas isso pode ser corrigido! Usando o cmdlet Group-Object
do PowerShell, você pode agrupar objetos juntos. Este cmdlet funciona como a cláusula GROUP BY do SQL.
O PowerShell tem uma maneira de resumir objetos por suas propriedades através do cmdlet Group Object do PowerShell. Este cmdlet permite que o scripter tenha uma visão geral das propriedades de muitos objetos de uma só vez em grupos.
Vamos gerar um monte de objetos do mesmo tipo. Esses objetos podem ser de qualquer tipo. No entanto, para esta demonstração, usarei objetos System.ServiceProcess.ServiceController que o cmdlet Get-Service
retorna.
Para que o Group-Object funcione como esperado, certifique-se de agrupar apenas objetos do mesmo tipo. É importante que todos os objetos tenham as mesmas propriedades.
Gerencie e Relate o Active Directory, Exchange e Microsoft 365 com o ManageEngine ADManager Plus. Baixe a avaliação gratuita!
Group-Object sem parâmetros
Get-Service
retorna todos os serviços na minha máquina local. Como há muitos serviços aqui, não consigo ter uma ideia de seu status, tipo de inicialização e mais. Gostaria de agrupar esses serviços primeiro pelo seu status. Para agrupar esses serviços, vou direcionar todos os objetos de serviço para o cmdlet Group-Object
do PowerShell e usar a propriedade Status
.
Note que, ao direcionar todos os serviços para Powershell Group Object
, você pode obter a contagem. Grande coisa, mas útil.
Agrupando objetos por uma única propriedade
Para agrupá-los por uma propriedade específica (status neste caso), preciso informar ao Group-Object
que quero agrupar em uma determinada propriedade do objeto. Isso é feito usando o parâmetro Property
no Group-Object
.
Agora estamos falando! Agora consigo ver quantos serviços estão parados e em execução de uma só vez. Posso fazer o mesmo para StartType
também.
Filtrando a Saída do Group-Object
Talvez eu queira me aprofundar e ver os serviços reais em um ou mais desses grupos. Posso obter esses objetos olhando para a propriedade Group
que é retornada pelo comando do objeto de grupo Powershell. O objeto Group
contém todos os serviços que foram agrupados pelo valor da propriedade do objeto. Para obter todos os serviços parados se estiver agrupando pelo status do serviço, posso filtrar os serviços pelo status de Stopped
e depois expandir o objeto Group
para ver todos esses serviços.
Agrupando objetos por várias propriedades
Não apenas é possível agrupar objetos dessa forma em uma única propriedade, mas também é possível agrupar em várias propriedades. Talvez você queira ver todos os serviços com base no seu status e no tipo de inicialização. Para fazer isso, basta adicionar outro nome de propriedade ao parâmetro Property
no Group-Object
.
É possível observar que, adicionando uma propriedade adicional, você pode essencialmente criar vários cenários “e” e agrupar em quantas propriedades forem necessárias!
Gerencie e Relate o Active Directory, Exchange e o Microsoft 365 com o ManageEngine ADManager Plus. Baixe a versão de avaliação gratuita!
Resumo
O cmdlet Group-Object
é um cmdlet que ajuda a agrupar objetos semelhantes com base em uma propriedade comum. Agrupar objetos dessa forma é útil de muitas maneiras diferentes. Espero que, ao aprender um pouco sobre como o cmdlet Group-Object
funciona, você obtenha mais ideias sobre como melhorar e criar scripts PowerShell mais eficientes!
Se você está começando com o PowerShell, recomendo fortemente que confira meu mini-curso sobre construção de ferramentas no PowerShell!
Source:
https://adamtheautomator.com/powershell-group-object/