Group-Object
Agrupa objetos que contêm o mesmo valor para propriedades especificadas.
Sintaxe
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
O Group-Object
cmdlet exibe objetos em grupos com base no valor de uma propriedade especificada.
Group-Object
Retorna uma tabela com uma linha para cada valor de propriedade e uma coluna que exibe o número de itens com esse valor.
Se você especificar mais de uma propriedade, Group-Object
primeiro as agrupará pelos valores da primeira propriedade e, em seguida, dentro de cada grupo de propriedades, agrupará pelo valor da próxima propriedade.
Exemplos
Exemplo 1: Agrupar arquivos por extensão
Este exemplo obtém recursivamente os arquivos em $PSHOME
e os agrupa por extensão de nome de arquivo. A saída é enviada para o Sort-Object
cmdlet, que os classifica pelos arquivos de contagem encontrados para determinada extensão. O Nome vazio representa diretórios.
Este exemplo usa o parâmetro NoElement para omitir os membros do grupo.
$files = Get-ChildItem -Path $PSHOME -Recurse
$files |
Group-Object -Property extension -NoElement |
Sort-Object -Property Count -Descending
Count Name
----- ----
365 .xml
231 .cdxml
197
169 .ps1xml
142 .txt
114 .psd1
63 .psm1
49 .xsd
36 .dll
15 .mfl
15 .mof
...
Exemplo 2: Agrupar inteiros por odds e pares
Este exemplo mostra como usar blocos de script como o valor do parâmetro Property . Este comando exibe os inteiros de 1 a 20, agrupados por ímpares e pares.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Exemplo 3: Agrupar eventos de log de eventos por EntryType
Este exemplo exibe as 1.000 entradas mais recentes no log de eventos do sistema, agrupadas por EntryType.
Na saída, a coluna Contagem representa o número de entradas em cada grupo. A coluna Nome representa os valores EventType que definem um grupo. A coluna Grupo representa os objetos em cada grupo.
Get-WinEvent -LogName System -MaxEvents 1000 | Group-Object -Property LevelDisplayName
Count Name Group
----- ---- -----
153 Error {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
Exemplo 4: Agrupar processos por classe de prioridade
Este exemplo demonstra o efeito do parâmetro NoElement . Esses comandos agrupam os processos no computador por classe de prioridade.
O primeiro comando usa o Get-Process
cmdlet para obter os processos no computador e envia os objetos pelo pipeline. Group-Object
agrupa os objetos pelo valor da propriedade PriorityClass do processo.
O segundo exemplo usa o parâmetro NoElement para remover os membros do grupo da saída. O resultado é uma tabela com apenas o valor da propriedade Count e Name .
Os resultados são mostrados na saída de exemplo a seguir.
Get-Process | Group-Object -Property PriorityClass
Count Name Group
----- ---- -----
55 Normal {System.Diagnostics.Process (AdtAgent), System.Diagnosti...
1 {System.Diagnostics.Process (Idle)}
3 High {System.Diagnostics.Process (Newproc), System.Diagnostic...
2 BelowNormal {System.Diagnostics.Process (winperf),
Get-Process | Group-Object -Property PriorityClass -NoElement
Count Name
----- ----
55 Normal
1
3 High
2 BelowNormal
Exemplo 5: Agrupar processos por nome
O exemplo a seguir usa Group-Object
para agrupar várias instâncias de processos em execução no computador local. Where-Object
Exibe processos com mais de uma instância.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Exemplo 6: objetos de grupo numa tabela hash
Este exemplo utiliza os parâmetros AsHashTable e AsString para devolver os grupos numa tabela hash, como uma coleção de pares chave-valor.
Na tabela hash resultante, cada valor da propriedade é uma chave e os elementos de grupo são os valores. Como cada chave é uma propriedade do objeto de tabela hash, pode utilizar a notação de ponto para apresentar os valores.
O primeiro comando recebe os cmdlets Get
e Set
na sessão, agrupa-os por verbo, devolve os grupos como uma tabela hash e guarda a tabela hash na variável $A
.
O segundo comando apresenta a tabela hash em $A
. Há dois pares chave-valor, um para os Get
cmdlets e outro para os Set
cmdlets.
O terceiro comando usa notação de ponto, $A.Get
para exibir os valores da chave Get em $A
. Os valores são o objeto CmdletInfo . O parâmetro AsString não converte os objetos nos grupos em cadeias de caracteres.
$A = Get-Command Get-*, Set-* -CommandType cmdlet |
Group-Object -Property Verb -AsHashTable -AsString
$A
Name Value
---- -----
Get {Get-Acl, Get-Alias, Get-AppLockerFileInformation, Get-AppLockerPolicy...}
Set {Set-Acl, Set-Alias, Set-AppBackgroundTaskResourcePolicy, Set-AppLockerPolicy...}
$A.Get
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Acl 3.0.0.0 Microsoft.PowerShell.Security
Cmdlet Get-Alias 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-AppLockerFileInformation 2.0.0.0 AppLocker
Cmdlet Get-AppLockerPolicy 2.0.0.0 AppLocker
...
Exemplo 10: Agrupar hashtables por seus valores-chave com propriedades calculadas
Este exemplo mostra como você pode agrupar objetos hashtable pelo valor de suas chaves. Você pode especificar um ou mais scriptblocks para o parâmetro Property . As expressões nesses blocos de script são usadas para agrupar a entrada como os valores para propriedades nomeadas.
@(
@{ name = 'a' ; weight = 7 }
@{ name = 'b' ; weight = 1 }
@{ name = 'c' ; weight = 3 }
@{ name = 'd' ; weight = 7 }
) | Group-Object -Property { $_.weight } -NoElement
Count Name
----- ----
2 7
1 1
1 3
Parâmetros
-AsHashTable
Indica que este cmdlet devolve o grupo como uma tabela hash. As chaves da tabela hash são os valores da propriedade pelos quais os objetos estão agrupados. Os valores da tabela hash são os objetos que têm esse valor da propriedade.
Por si só, o parâmetro AsHashTable devolve cada tabela hash em que cada chave é uma instância do objeto agrupado. Quando utilizado com o parâmetro AsString, as chaves na tabela hash são cadeias.
Tipo: | SwitchParameter |
Aliases: | AHT |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-AsString
Indica que este cmdlet converte as chaves da tabela hash em cadeias. Por padrão, as chaves da tabela de hash são instâncias do objeto agrupado. Este parâmetro é válido somente quando usado com o parâmetro AsHashTable .
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-CaseSensitive
Indica que esse cmdlet diferencia maiúsculas de minúsculas do agrupamento. Sem esse parâmetro, os valores de propriedade de objetos em um grupo podem ter casos diferentes.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Culture
Especifica a cultura a ser usada ao comparar cadeias de caracteres.
Tipo: | String |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-InputObject
Especifica os objetos a serem agrupados. Insira uma variável que contenha os objetos ou digite um comando ou expressão que obtenha os objetos.
Quando você usa o parâmetro InputObject para enviar uma coleção de objetos para Group-Object
, Group-Object
recebe um objeto que representa a coleção. Como resultado, ele cria um único grupo com esse objeto como seu membro.
Para agrupar os objetos em uma coleção, canalize os objetos para Group-Object
.
Tipo: | PSObject |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-NoElement
Indica que esse cmdlet omite os membros de um grupo dos resultados.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Property
Especifica as propriedades para agrupamento. Os objetos são organizados em grupos nomeados com base no valor das propriedades especificadas. Quando nenhuma propriedade é especificada, os objetos são agrupados por seu valor ou pela ToString()
representação de seu valor. A saída é apresentada na ordem em que os objetos de grupo foram criados.
O valor do parâmetro Property pode ser uma nova propriedade calculada. A propriedade calculada pode ser um bloco de script ou uma tabela hash. Os pares chave-valor válidos são:
- Expressão -
<string>
ou<script block>
Para obter mais informações, consulte about_Calculated_Properties.
Tipo: | Object[] |
Position: | 0 |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
Entradas
Você pode canalizar qualquer objeto para este cmdlet.
Saídas
Por padrão, esse cmdlet retorna um objeto GroupInfo .
Quando você usa o parâmetro AsHashTable , esse cmdlet retorna um objeto Hashtable .
Notas
O Windows PowerShell inclui os seguintes aliases para Group-Object
:
group
Você pode usar o parâmetro GroupBy dos cmdlets de formatação, como Format-Table
e Format-List
, para agrupar objetos. Ao contrário Group-Object
do , que cria uma única tabela com uma linha para cada valor de propriedade, os parâmetros GroupBy criam uma tabela para cada valor de propriedade com uma linha para cada item que tem o valor da propriedade.
Group-Object
não requer que os objetos que estão sendo agrupados sejam do mesmo tipo Microsoft .NET.
Ao agrupar objetos de diferentes tipos .NET, Group-Object
usa as seguintes regras:
Mesmos nomes e tipos de propriedade.
Se os objetos tiverem uma propriedade com o nome especificado e os valores de propriedade tiverem o mesmo tipo .NET, os valores de propriedade serão agrupados pelas mesmas regras que seriam usadas para objetos do mesmo tipo.
Mesmos nomes de propriedade, tipos diferentes.
Se os objetos tiverem uma propriedade com o nome especificado, mas os valores de propriedade tiverem um tipo .NET diferente em objetos diferentes,
Group-Object
usará o tipo .NET da primeira ocorrência da propriedade como o tipo .NET para esse grupo de propriedades. Quando um objeto tem uma propriedade com um tipo diferente, o valor da propriedade é convertido para o tipo para esse grupo. Se a conversão de tipo falhar, o objeto não será incluído no grupo.Propriedades ausentes.
Os objetos que não têm uma propriedade especificada não podem ser agrupados. Os objetos que não estão agrupados aparecem na saída final do objeto GroupInfo em um grupo chamado
AutomationNull.Value
.
Os grupos de saída são apresentados na ordem em que o grupo foi criado. Os itens pertencentes a cada grupo não são classificados. Eles são listados na ordem em que foram recebidos.