Compartir a través de


Group-Object

Agrupa los objetos que contienen el mismo valor para las propiedades especificadas.

Sintaxis

Group-Object [-AsHashTable] [-AsString] [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-InputObject <psobject>] [-NoElement] [<CommonParameters>]

Descripción

El cmdlet Group-Object muestra los objetos en grupos según el valor de una propiedad concreta. Group-Object devuelve una tabla con una fila por cada valor de propiedad y una columna en la que se muestra el número de elementos con ese valor.

Si se especifican varias propiedades, Group-Object agrupa primero por el valor de la primera propiedad y, a continuación, dentro de cada grupo, agrupa por el valor de la siguiente propiedad.

Parámetros

-AsHashTable

Devuelve el grupo como una tabla hash. Las claves de la tabla hash son los valores de propiedad por los que se agrupan los objetos. Los valores de la tabla hash son los objetos que tienen ese valor de propiedad.

Si no se utiliza con ningún otro parámetro, AsHashTable devuelve cada tabla hash en la que cada clave es una instancia del objeto agrupado. Cuando se utiliza con el parámetro AsString, las claves en la tabla hash son cadenas.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

GroupInfo object

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-AsString

Convierte las claves de tabla hash en cadenas. De forma predeterminada, estas claves son instancias del objeto agrupado. Este parámetro es válido únicamente cuando se usa con el parámetro AsHashTable.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

GroupInfo objects

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-CaseSensitive

Determina que debe distinguirse entre mayúsculas y minúsculas en las agrupaciones. Sin este parámetro, el uso de mayúsculas y minúsculas puede ser diferente en los valores de propiedad de los objetos de un grupo.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Culture <string>

Especifica la referencia cultural que se va a usar en las comparaciones de cadenas.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-InputObject <psobject>

Especifica los objetos que se van a agrupar. Especifique la variable que contiene los objetos, o bien, escriba un comando o una expresión que obtenga los objetos.

Cuando se usa el parámetro InputObject para enviar una colección de objetos a Group-Object, este cmdlet recibe un objeto que representa la colección. Como resultado, crea un solo grupo con ese objeto como miembro.

Para agrupar los objetos de una colección, canalice los objetos a Group-Object.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

true (ByValue)

¿Aceptar caracteres comodín?

false

-NoElement

Omite de los resultados los miembros de un grupo.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Property <Object[]>

Especifica las propiedades de la agrupación. Los objetos se organizan en grupos según el valor de la propiedad especificada.

El valor del parámetro Property puede ser una nueva propiedad calculada. Para crear una propiedad calculada, cree una tabla hash con una clave Expression que especifique una cadena o un valor de bloque de script.

¿Requerido?

false

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

<CommonParameters>

Este cmdlet admite los parámetros comunes: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer y -OutVariable. Para obtener más información, vea about_Commonparameters.

Entradas y salidas

El tipo de entrada es el tipo de los objetos que se pueden canalizar al cmdlet. El tipo devuelto es el tipo de los objetos que el cmdlet devuelve.

Entradas

System.Management.Automation.PSObject

Puede canalizar cualquier objeto a Group-Object.

Salidas

Microsoft.PowerShell.Commands.GroupInfo o System.Collections.Hashtable

Cuando se usa el parámetro AsHashTable, Group-Object devuelve una tabla hash. De lo contrario, devuelve un objeto GroupInfo.

Notas

Asimismo, puede utilizar el parámetro GroupBy de los cmdlets de formato (por ejemplo, Format-Table [m2] y Format-List [m2]) para agrupar los objetos. A diferencia de Group-Object, que crea una sola tabla con una fila para cada valor de propiedad, los parámetros GroupBy crean una tabla para cada valor de propiedad con una fila para cada elemento que tiene el valor de propiedad.

Group-Object no requiere que los objetos que se están agrupando sean del mismo tipo de Microsoft .NET Framework. Al agrupar objetos de diferentes tipos de .NET Framework, Group-Object sigue las reglas que se detallan a continuación:

-- Los mismos nombres de propiedad y tipos: si los objetos tienen una propiedad con el nombre especificado y los valores de propiedad tienen el mismo tipo de .NET Framework, los valores de propiedad se agrupan siguiendo las mismas reglas que se aplicarían para objetos del mismo tipo.

-- Los mismos nombres de propiedad pero tipos diferentes: si los objetos tienen una propiedad con el nombre especificado pero los valores de propiedad tienen un tipo de .NET Framework diferente en objetos distintos, Group-Object usa el tipo de .NET Framework de la primera instancia de la propiedad como tipo de .NET Framework para ese grupo de propiedades. Cuando un objeto tiene una propiedad con un tipo diferente, el valor de propiedad se convierte en el tipo para ese grupo. Si la conversión de tipo genera un error, el objeto no se incluirá en el grupo.

-- Ausencia de propiedades: los objetos que no tienen la propiedad especificada no se pueden agrupar. Los objetos que no se pueden agrupar aparecen al final de la salida del objeto GroupInfo en un grupo denominado AutomationNull.Value.

Ejemplo 1

C:\PS>get-childitem *.doc | group-object -property length

Descripción
-----------
Este comando obtiene los archivos de la ubicación actual que tienen la extensión .doc y los agrupa según su tamaño.





Ejemplo 2

C:\PS>get-childitem | sort-object -property extension | group-object -property extension

Descripción
-----------
Este comando obtiene los archivos que se encuentran en la ubicación actual, los ordena según su extensión y, a continuación, los agrupa por extensión. Observe que primero se ordenan y después se agrupan los archivos.





Ejemplo 3

C:\PS>1..35 | group-object -property {$_ % 2},{$_ % 3}

Descripción
-----------
En este ejemplo se muestra cómo utilizar los bloques de script como valor del parámetro Property. 

Este comando muestra los enteros de 1 a 35, agrupados según el resto que queda al dividirlos entre 2 ó 3.





Ejemplo 4

C:\PS>$events = get-eventlog -logname system -newest 1000 

C:\PS> $events | group-object -property eventID 

Count Name                      Group
----- ----                      -----
   44 Information               {System.Diagnostics.EventLogEntry,
    5 Error                     {System.Diagnostics.EventLogEntry,
    1 Warning                   {System.Diagnostics.EventLogEntry}

Descripción
-----------
Estos comandos muestran las 1000 entradas más recientes del registro de eventos del sistema agrupadas según su identificador de evento. 

El primer comando utiliza el cmdlet Get-EventLog para recuperar los eventos y usa el operador de asignación (=) para guardarlos en la variable $events. 

El segundo comando usa un operador de canalización (|) para enviar los eventos almacenados en la variable $events al cmdlet Group-Object. El comando utiliza el parámetro Property para especificar que los eventos deben agruparse según el valor de su propiedad EventID. 

En el resultado, la columna Count representa el número de entradas de cada grupo, la columna Name representa los valores de EventID que definen un grupo y la columna Group representa los objetos de cada grupo.





Ejemplo 5

C:\PS>get-process | group-object -property priorityclass

Count Name                Group
----- ----                -----
   55 Normal              {System.Diagnostics.Process (AdtAgent), System.Diagnostics.Process (alg), System.Dia...
    1                     {System.Diagnostics.Process (Idle)}
    3 High                {System.Diagnostics.Process (Newproc), System.Diagnostics.Process (winlogon), System.D... 
    2 BelowNormal         {System.Diagnostics.Process (winperf),  


C:\PS>get-process | group-object -property company -noelement
Count Name
----- ----
   55 Normal
    1
    3 High
    2 BelowNormal

Descripción
-----------
En este ejemplo se muestra el efecto del parámetro NoElement. Estos comandos agrupan los procesos del equipo por clase de prioridad.

El primer comando utiliza el cmdlet Get-Process para obtener los procesos del equipo. Utiliza un operador de canalización (|) para enviar los resultados a Group-Object, que agrupa los objetos en función del valor de la propiedad PriorityClass del proceso.

El segundo comando es idéntico al primero, salvo en que utiliza el parámetro NoElement para eliminar de los resultados los miembros del grupo. El resultado es una tabla con solo el recuento y el nombre de los valores de propiedad.

Los resultados se muestran en el siguiente ejemplo.





Ejemplo 6

C:\PS>get-eventlog -logname system -newest 1000 | group-object -property {$_.TimeWritten - $_.TimeGenerated}

Descripción
-----------
Este comando muestra cómo proporcionar el valor del parámetro Property como un bloque de script.

Este comando muestra las 1000 entradas más recientes del registro de eventos del sistema agrupadas según el tiempo transcurrido entre su creación y su inserción en el registro. 

El comando utiliza el cmdlet Get-EventLog para obtener las entradas del registro de eventos. Utiliza un operador de canalización (|) para enviar las entradas al cmdlet Group-Object. El valor del parámetro Property se especifica como un bloque de script (una expresión entre llaves). El resultado de la evaluación del bloque de script es el tiempo transcurrido entre la creación de la entrada del registro y su introducción en el registro. Este valor se usa para agrupar los 1000 eventos más recientes.





Ejemplo 7

C:\PS>get-childitem | group-object extension -noelement 

Count Name
----- ----
   21
   82 .txt
    9 .cmd
    5 .log
   12 .xml
    5 .htm
   36 .ps1
    1 .psc1
    3 .exe
    6 .csv
    1 .psd1
    2 .bat

Descripción
-----------
Este comando agrupa los elementos del directorio actual por extensión de nombre de archivo. Utiliza el parámetro NoElement para omitir los miembros del grupo.

Los resultados se muestran en el siguiente ejemplo.





Ejemplo 8

C:\PS>"a", "b", "c", "c", "d" | get-unique

a
b
c
d

C:\PS> "a", "b", "c", "c", "d" | group-object -noelement | where {$_.Count -gt 1}
Count Name
----- ----
    2 c

C:\PS> get-process | group-object -property Name -noelement | where {$_.count -gt 1}
Count Name
----- ----
    2 csrss
    5 svchost
    2 winlogon
    2 wmiprvse

Descripción
-----------
En este ejemplo se muestra cómo buscar los valores de propiedad únicos y no únicos (repetidos) en una colección. 

El primer comando obtiene los elementos únicos de una matriz canalizando la matriz al cmdlet Get-Unique.

El segundo comando obtiene los elementos no únicos de una matriz. Canaliza la matriz al cmdlet Group-Object, que agrupa los objetos por valor. Los grupos resultantes se canalizan al cmdlet Where-Object, que selecciona los objetos con grupos con más de un miembro.

El tercer comando muestra un uso práctico de esta técnica. Utiliza el mismo método para buscar en el equipo procesos con el mismo nombre.

Los resultados se muestran en el siguiente ejemplo.





Ejemplo 9

C:\PS>$a = get-command get-*, set-* -type cmdlet | group-object -property verb -ashashtable -asstring

C:\PS> $a 

Name    Value
----    -----
Get     {Get-PSCallStack, Get-PSBreakpoint, Get-PSDrive, Get-PSSession...}
Set     {Set-Service, Set-StrictMode, Set-PSDebug, Set-PSSessionConfiguration...}

C:\PS> $a.get

CommandType     Name                 Definition
-----------     ----                 ----------
Cmdlet          Get-PSCallStack      Get-PSCallStack [-Verbose] [-Debug] [-ErrorAction <ActionPrefer...
Cmdlet          Get-PSBreakpoint     Get-PSBreakpoint [[-Id] <Int32[]>] [-Verbose] [-Debug] [-ErrorA...
Cmdlet          Get-PSDrive          Get-PSDrive [[-Name] <String[]>] [-Scope <String>] [-PSProvider...
...

Descripción
-----------
En este ejemplo se utilizan los parámetros AsHashTable y AsString para devolver los grupos en una tabla hash, es decir, como una colección de pares clave-valor. 

En la tabla hash resultante, cada valor de propiedad es una clave y los elementos de grupo son los valores. Dado que cada clave es una propiedad del objeto de tabla hash, se puede utilizar la notación de puntos para mostrar los valores.

El primer comando obtiene los cmdlets Get y Set de la sesión, los agrupa por verbo, devuelve los grupos como una tabla hash y guarda la tabla hash en una variable $a. 

El segundo comando muestra la tabla hash almacenada en $a. Hay dos pares clave-valor, uno para los cmdlets Get y otro para los cmdlets Set.

El tercer comando utiliza la notación de puntos para mostrar los valores de la clave Get en $a. Los valores son objetos CmdletInfo. El parámetro AsString no convierte los objetos de los grupos en cadenas.