Group-Object

Objetos de grupos que contêm o mesmo valor para as propriedades especificadas.

Syntax

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 agrupa-as pelos valores da primeira propriedade e, em seguida, dentro de cada grupo de propriedades, agrupa-as pelo valor da próxima propriedade.

Exemplos

Exemplo 1: Agrupar arquivos por extensão

Este exemplo obtém recursivamente os arquivos e $PSHOME 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 a extensão fornecida. 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 probabilidades e pares

Este exemplo mostra como usar blocos de script como o valor do parâmetro Property . Este comando exibe os números inteiros de 1 a 20, agrupados por odds e par.

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-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 valor da propriedade Count e Name .

Os resultados são mostrados na seguinte saída de exemplo.

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: 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 de grupo são os valores. Como cada chave é uma propriedade do objeto de tabela de hash, você pode usar a notação de ponto para exibir os valores.

O primeiro comando obtém os Get cmdlets e Set na sessão, agrupa-os por verbo, retorna os grupos como uma tabela de hash e salva a $A tabela de hash na variável.

O segundo comando exibe a tabela de hash no $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 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 de chave com propriedades calculadas

Este exemplo mostra como você pode agrupar objetos hashtable pelo valor de suas chaves. Você pode especificar um ou mais blocos de script para o parâmetro Property . As expressões nesses blocos de script são usadas para agrupar a entrada, como os valores das 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 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 o valor da 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.

Type:SwitchParameter
Aliases:AHT
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsString

Indica que esse cmdlet converte as chaves da tabela de hash em cadeias de caracteres. Por padrão, as chaves de tabela de hash são instâncias de objeto agrupado. Esse parâmetro é válido somente quando usado com o parâmetro AsHashTable .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CaseSensitive

Indica que esse cmdlet diferencia maiúsculas de minúsculas do agrupamento. Sem esse parâmetro, os valores de propriedade dos objetos em um grupo podem ter diferentes casos.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Culture

Especifica a cultura a ser usada ao comparar cadeias de caracteres.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Especifica os objetos ao grupo. Insira uma variável que contém os objetos ou digite um comando ou uma 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 seu membro.

Para agrupar os objetos em uma coleção, canalize os objetos para Group-Object.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-NoElement

Indica que esse cmdlet omite os membros de um grupo dos resultados.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Property

Especifica as propriedades de 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 de hash. Os pares chave-valor válidos são:

  • Expressão - <string> ou <script block>

Para obter mais informações, consulte about_Calculated_Properties.

Type:Object[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

PSObject

Você pode canalizar qualquer objeto para esse 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 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-Objectdo , 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 de 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 no tipo daquele 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 estão listados na ordem em que foram recebidos.