Group-Object
Agrupa objetos que contêm o mesmo valor para as propriedades especificadas.
Sintaxe
HashTable
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
O cmdlet Group-Object 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 os agrupa pelos valores da primeira propriedade e, em seguida, dentro de cada grupo de propriedades, ele agrupa pelo valor da próxima propriedade.
A partir do PowerShell 7, Group-Object pode combinar o CaseSensitive e parâmetros de AsHashtable para criar uma tabela de hash que diferencia maiúsculas de minúsculas. As chaves de tabela hash usam comparações que diferenciam maiúsculas de minúsculas e geram um objeto System.Collections.Hashtable.
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 cmdlet Sort-Object, que os classifica pelos arquivos de contagem encontrados para a extensão fornecida. O nome de
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 probabilidades e pares
Este exemplo mostra como usar blocos de script como o valor do parâmetro propriedade
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Exemplo 3: Agrupar hashtables por valor de chave
A partir do PowerShell 6, o Group-Object dá suporte à classificação de entrada de com hash por valores de chave.
O exemplo a seguir agrupa uma matriz de hashables pelo valor da chave weight de cada hashable.
Este exemplo usa o parâmetro NoElement para omitir os membros do grupo.
@(
@{ name = 'a' ; weight = 7 }
@{ name = 'b' ; weight = 1 }
@{ name = 'c' ; weight = 3 }
@{ name = 'd' ; weight = 7 }
) | Group-Object -Property weight -NoElement
Count Name
----- ----
1 1
1 3
2 7
Exemplo 4: 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 de representa o número de entradas em cada grupo. A coluna Name 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 5: agrupar processos por classe de prioridade
Este exemplo demonstra o efeito do parâmetro
O primeiro comando usa o cmdlet Get-Process para obter os processos no computador e envia os objetos pelo pipeline.
Group-Objectagrupa 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 de Contagem de e o valor da propriedade nome do.
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 6: 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 7: Agrupar objetos em uma tabela de hash
Este exemplo usa os parâmetros asHashTable e AsString para retornar os grupos em uma tabela de hash, como uma coleção de pares chave-valor.
Na tabela de hash resultante, cada valor de propriedade é uma chave e os elementos do grupo são os valores. Como cada chave é uma propriedade do objeto de tabela hash, você pode usar a notação de ponto para exibir os valores.
O primeiro comando obtém os cmdlets Get e Set na sessão, agrupa-os por verbo, retorna os grupos como uma tabela de hash e salva a tabela de hash na variável $A.
O segundo comando exibe a tabela de hash no $A. Há dois pares chave-valor, um para os cmdlets Get e outro para os cmdlets Set.
O terceiro comando usa notação de ponto, $A.Get para exibir os valores da chave obter no $A. Os valores sã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 7.0.0.0 Microsoft.PowerShell.Security
Cmdlet Get-Alias 7.0.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-AppLockerFileInformation 2.0.0.0 AppLocker
Cmdlet Get-AppLockerPolicy 2.0.0.0 AppLocker
...
Exemplo 8: Criar uma tabela de hash que diferencia maiúsculas de minúsculas
Este exemplo combina os parâmetros CaseSensitive e AsHashTable para criar uma tabela de hash que diferencia maiúsculas de minúsculas. Os arquivos no exemplo têm extensões de .txt e .TXT.
$hash = Get-ChildItem -Path C:\Files |
Group-Object -Property Extension -CaseSensitive -AsHashTable
$hash
Name Value
---- -----
.TXT {C:\Files\File7.TXT, C:\Files\File8.TXT, C:\Files\File9.TXT}
.txt {C:\Files\file1.txt, C:\Files\file2.txt, C:\Files\file3.txt}
A variável $hash armazena o objeto System.Collections.Hashtable.
Get-ChildItem obtém os nomes de arquivo do diretório C:\Files e envia os objetos System.IO.FileInfo no pipeline.
Group-Object agrupa os objetos usando o valor da Propriedadede Extensão. Os parâmetros CaseSensitive e AsHashTable criam a tabela de hash e as chaves são agrupadas usando as chaves que diferenciam maiúsculas de minúsculas .txt e .TXT.
Parâmetros
-AsHashTable
Indica que esse cmdlet retorna o grupo como uma tabela de hash. As chaves da tabela de hash são os valores de propriedade pelos quais os objetos são agrupados. Os valores da tabela de hash são os objetos que têm esse valor de propriedade.
Por si só, o parâmetro AsHashTable retorna cada tabela de hash na qual cada chave é uma instância do objeto agrupado. Quando usado com o parâmetro AsString, as chaves na tabela de hash são cadeias de caracteres.
A partir do PowerShell 7, para criar tabelas de hash que diferenciam maiúsculas de minúsculas, inclua CaseSensitive e AsHashtable em seu comando.
Propriedades do parâmetro
| Tipo: | SwitchParameter |
| Valor padrão: | False |
| Dá suporte a curingas: | False |
| DontShow: | False |
| Aliases: | AHT |
Conjuntos de parâmetros
(All)
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-AsString
Indica que esse cmdlet converte as chaves de tabela de hash em cadeias de caracteres. Por padrão, as chaves de tabela hash são instâncias do objeto agrupado. Esse parâmetro é válido somente quando usado com o parâmetro asHashTable
Propriedades do parâmetro
| Tipo: | SwitchParameter |
| Valor padrão: | False |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
(All)
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | 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.
A partir do PowerShell 7, para criar tabelas de hash que diferenciam maiúsculas de minúsculas, inclua CaseSensitive e AsHashtable em seu comando.
Propriedades do parâmetro
| Tipo: | SwitchParameter |
| Valor padrão: | False |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
(All)
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-Culture
Especifica a cultura a ser usada ao comparar cadeias de caracteres.
Propriedades do parâmetro
| Tipo: | String |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
(All)
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-InputObject
Especifica os objetos a serem agrupados. Insira uma variável que contenha os objetos ou digite um comando ou expressão que obtém 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 membro.
Para agrupar os objetos em uma coleção, redirecione os objetos para Group-Object.
Propriedades do parâmetro
| Tipo: | PSObject |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
(All)
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | True |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-NoElement
Indica que esse cmdlet omite os membros de um grupo dos resultados.
Propriedades do parâmetro
| Tipo: | SwitchParameter |
| Valor padrão: | False |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
(All)
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | 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 representação ToString() de seu valor. A saída é classificada em ordem crescente pelos nomes de grupo.
O valor do parâmetro da Propriedade
- Expressão –
<string>ou<script block>
Para obter mais informações, consulte about_Calculated_Properties.
Propriedades do parâmetro
| Tipo: | Object[] |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
(All)
| Cargo: | 0 |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
CommonParameters
Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.
Entradas
PSObject
Você pode redirecionar qualquer objeto para este cmdlet.
Saídas
GroupInfo
Por padrão, esse cmdlet retorna um objeto GroupInfo.
Hashtable
Quando você usa o parâmetro AsHashTable, esse cmdlet retorna um objeto Hashtable.
Observações
O PowerShell inclui os seguintes aliases para Group-Object:
- Todas as plataformas:
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 de Group-Object, 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 exige que os objetos que estão sendo agrupados sejam do mesmo tipo do 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 da 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-Objectusará o tipo .NET da primeira ocorrência da propriedade como o tipo .NET desse grupo de propriedades. Quando um objeto tem uma propriedade com um tipo diferente, o valor da propriedade é convertido no tipo desse grupo. Se a conversão de tipo falhar, o objeto não será incluído no grupo.Propriedades ausentes.
Objetos que não têm uma propriedade especificada não podem ser agrupados. Objetos que não são agrupados aparecem na saída final do objeto GroupInfo em um grupo chamado
AutomationNull.Value.
A saída é classificada em ordem crescente pelos nomes de grupo. Os itens que pertencem a cada grupo não são classificados. Eles são listados na ordem em que foram recebidos.