Group-Object
Agrupa objetos que contienen el mismo valor para las propiedades especificadas.
Sintaxis
Default (valor predeterminado)
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
El cmdlet Group-Object muestra objetos en grupos en función del valor de una propiedad especificada.
Group-Object devuelve una tabla con una fila para cada valor de propiedad y una columna que muestra el número de elementos con ese valor.
Si especifica más de una propiedad, Group-Object primero las agrupa por los valores de la primera propiedad y, a continuación, dentro de cada grupo de propiedades, agrupa por el valor de la propiedad siguiente.
Ejemplos
Ejemplo 1: Agrupar archivos por extensión
En este ejemplo se obtienen de forma recursiva los archivos en $PSHOME y los agrupa por extensión de nombre de archivo. La salida se envía al cmdlet Sort-Object que los ordena por los archivos de recuento encontrados para la extensión especificada. El Nombre vacío representa directorios.
En este ejemplo se usa el parámetro NoElement para omitir los miembros del 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
...
Ejemplo 2: Agrupar enteros por cuotas e incluso
En este ejemplo se muestra cómo usar bloques de script como valor del parámetro Property
Este comando muestra los enteros de 1 a 20, agrupados por probabilidades e incluso.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 1 {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}
10 0 {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Ejemplo 3: Agrupar eventos de registro de eventos por EntryType
Estos comandos muestran las 1000 entradas más recientes en el registro de eventos Del sistema, agrupadas por EntryType.
En la salida, la columna Count
Get-WinEvent -LogName System -MaxEvents 1000 | Group-Object -Property LevelDisplayName
Count Name Group
----- ---- -----
153 Error {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
Ejemplo 4: Agrupar procesos por clase de prioridad
En este ejemplo se muestra el efecto del parámetro
El primer comando usa el cmdlet Get-Process para obtener los procesos del equipo.
Usa un operador de canalización | para enviar los resultados a Group-Object, que agrupa los objetos por el valor del propiedad PriorityClass del proceso.
El segundo comando es idéntico al primero, salvo que usa el parámetro NoElement para eliminar los miembros del grupo de la salida. El resultado es una tabla con solo el número y el nombre del valor de propiedad.
Los resultados se muestran en los siguientes resultados de ejemplo.
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
Ejemplo 5: Agrupar procesos por nombre
En el ejemplo siguiente se usa Group-Object a varias instancias de procesos que se ejecutan en el equipo local.
Get-Process | Group-Object -Property Name -NoElement | Where {$_.count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Ejemplo 8: Agrupar objetos en una tabla hash
En este ejemplo se usan los parámetros de AsHashTable y AsString para devolver los grupos de 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, puede usar 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 la variable $A.
El segundo comando muestra la tabla hash en $A.
Hay dos pares clave-valor, uno para los cmdlets de Get y otro para los cmdlets de Set.
El tercer comando usa la notación de puntos para mostrar los valores de la clave get de
$A = Get-Command get-*, set-* -CommandType cmdlet | Group-Object -Property verb -AsHashTable -AsString
$A
Name Value
---- -----
Get {Get-PSCallStack, Get-PSBreakpoint, Get-PSDrive, Get-PSSession...}
Set {Set-Service, Set-StrictMode, Set-PSDebug, Set-PSSessionConfiguration...}
$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...
...
Parámetros
-AsHashTable
Indica que este cmdlet 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.
Por sí mismo, el parámetro
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | AHT |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-AsString
Indica que este cmdlet convierte las claves de tabla hash en cadenas. De forma predeterminada, las claves de tabla hash son instancias del objeto agrupado. Este parámetro solo es válido cuando se usa con el parámetro AsHashTable.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-CaseSensitive
Indica que este cmdlet distingue mayúsculas de minúsculas en la agrupación. Sin este parámetro, los valores de propiedad de los objetos de un grupo pueden tener casos diferentes.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Culture
Especifica la referencia cultural que se va a usar al comparar cadenas.
Propiedades de parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-InputObject
Especifica los objetos que se van a agrupar. Escriba una variable que contenga los objetos, o escriba un comando o expresión que obtenga los objetos.
Cuando se usa el parámetro InputObject para enviar una colección de objetos a Group-Object, Group-Object recibe un objeto que representa la colección.
Como resultado, crea un único grupo con ese objeto como miembro.
Para agrupar los objetos de una colección, canalice los objetos a Group-Object.
Propiedades de parámetro
| Tipo: | PSObject |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-NoElement
Indica que este cmdlet omite los miembros de un grupo de los resultados.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Property
Especifica las propiedades para la agrupación. Los objetos se organizan en grupos en función del 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 expresión clave que especifique un valor de bloque de cadena o script.
Propiedades de parámetro
| Tipo: | Object[] |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | 0 |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
Entradas
PSObject
Puede canalizar cualquier objeto a Group-Object.
Salidas
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
Al usar el parámetro
Notas
También puede usar el parámetro GroupBy de los cmdlets de formato (como
Format-TableyFormat-List) para agrupar objetos. A diferencia deGroup-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-Objectno requiere que los objetos que se agrupan sean del mismo tipo de Microsoft .NET Framework. Al agrupar objetos de diferentes tipos de .NET Framework,Group-Objectusa las reglas siguientes:Los mismos nombres y tipos de propiedades. 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 mediante las mismas reglas que se usarían para los objetos del mismo tipo.
Los mismos nombres de propiedad, 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 diferentes,
Group-Objectusa el tipo de .NET Framework de la primera aparición de la propiedad como el 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 de ese grupo. Si se produce un error en la conversión de tipos, el objeto no se incluye en el grupo.Propiedades que faltan. Los objetos que no tienen una propiedad especificada se consideran no agrupables. Los objetos no agrupables aparecen en la salida final de GroupInfo objeto en un grupo denominado
AutomationNull.Value.