Quando se trabalha com o PowerShell, há momentos em que é necessário lidar com conjuntos de dados. Lidamos com muitos arquivos, contas de usuário, máquinas virtuais e mais. Quando você exibe esses objetos diversos no console, eles são exibidos na tela um após o outro, sem considerar como você gostaria de vê-los. Mas isso é ajustável! Usando o cmdlet Group-Object
do PowerShell, é possível agrupar objetos. Este cmdlet funciona como a declaração SQL GROUP BY.
O PowerShell possui uma maneira de resumir objetos por suas propriedades através do cmdlet Powershell Group Object. Esse cmdlet permite ao scripter ter uma visão geral das propriedades de muitos objetos de uma 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 o Microsoft 365 com o ManageEngine ADManager Plus. Baixe a Avaliação Gratuita!
Group-Object sem Parâmetros
O comando Get-Service
retorna todos os serviços em 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 encaminhar todos os objetos de serviço para o cmdlet Group-Object
do PowerShell e usar a propriedade Status
.
Observe que encaminhando todos os serviços para o 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 ao mesmo tempo. Posso fazer o mesmo para StartType
também.
Filtrando a saída do Group-Object
Talvez eu queira mergulhar 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 de objeto de grupo do 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 múltiplas propriedades
Não só é possível agrupar objetos assim em uma única propriedade, mas também é possível agrupar em várias propriedades também. Talvez você queira ver todos os serviços com base em seu status e seu tipo de inicialização. Para fazer isso, só preciso adicionar outro nome de propriedade ao parâmetro Property
no Group-Object
.
Você pode ver que, adicionando uma propriedade adicional, essencialmente você pode criar uma série de 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 o teste gratuito!
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ê tenha mais ideias sobre como melhorar e criar scripts do PowerShell!
Se você está apenas começando com o PowerShell, eu encorajo fortemente você a conferir meu mini-curso sobre construção de ferramentas no PowerShell!
Source:
https://adamtheautomator.com/powershell-group-object/