Group-Object
Agrupa objetos que contienen el mismo valor en las propiedades especificadas.
Sintaxis
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
El Group-Object
cmdlet 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 de $PSHOME
y los agrupa por extensión de nombre de archivo. La salida se envía al Sort-Object
cmdlet , 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 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Ejemplo 3: Agrupar eventos de registro de eventos por EntryType
En este ejemplo se muestran las 1000 entradas más recientes en el registro de eventos System, agrupadas por EntryType.
En la salida, la columna Count representa el número de entradas de cada grupo. La columna Name representa los valores EventType que definen un grupo. La columna Grupo representa los objetos de 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...}
Ejemplo 4: Agrupar procesos por clase de prioridad
En este ejemplo se muestra el efecto del parámetro NoElement . Estos comandos agrupan los procesos en el equipo por la clase de prioridad.
El primer comando usa el Get-Process
cmdlet para obtener los procesos del equipo y envía los objetos a la canalización. Group-Object
agrupa los objetos por el valor de la propiedad PriorityClass del proceso.
En el segundo ejemplo se usa el parámetro NoElement para quitar los miembros del grupo de la salida. El resultado es una tabla con solo el valor de la propiedad Count y Name .
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
para agrupar varias instancias de procesos que se ejecutan en el equipo local. Where-Object
muestra los procesos con más de una instancia.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Ejemplo 6: Agrupar objetos en una tabla hash
En este ejemplo se usan los parámetros AsHashTable y AsString para devolver los grupos de una tabla hash, 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 utilizar la notación de puntos para mostrar los valores.
El primer comando obtiene los Get
cmdlets y Set
de la sesión, los agrupa por verbo, devuelve los grupos como una tabla hash y guarda la tabla hash en la $A
variable .
El segundo comando muestra la tabla hash en $A
. Hay dos pares clave-valor, uno para los Get
cmdlets y otro para los Set
cmdlets.
El tercer comando usa la notación de puntos para $A.Get
mostrar los valores de la clave Get en $A
. Los valores son el objeto CmdletInfo . El parámetro AsString no convierte los objetos de los grupos en cadenas.
$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
...
Ejemplo 10: Agrupar tablas hash por sus valores de clave con propiedades calculadas
En este ejemplo se muestra cómo puede agrupar objetos hashtable por el valor de sus claves. Puede especificar uno o varios bloques de script para el parámetro Property . Las expresiones de estos bloques de script se usan para agrupar para la entrada, como los valores de las propiedades con nombre.
@(
@{ 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 devuelve el grupo como una tabla hash. Las claves de la tabla hash son los valores de propiedad por lo 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 AsHashTable devuelve cada tabla hash en la que cada clave es una instancia del objeto agrupado. Cuando se usa con el parámetro AsString , las claves de la tabla hash son cadenas.
Tipo: | SwitchParameter |
Alias: | AHT |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-AsString
Indica que este cmdlet convierte las claves de tabla hash en cadenas. De forma predeterminada, las claves de la tabla hash son instancias del objeto agrupado. Este parámetro solo es válido cuando se usa con el parámetro AsHashTable .
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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 podrían diferir en las mayúsculas y minúsculas.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Culture
Especifica la referencia cultural que se va a utilizar al comparar cadenas.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-InputObject
Especifica los objetos que se van a agrupar. Especifique una variable que contenga los objetos o 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
, 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
.
Tipo: | PSObject |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-NoElement
Indica que este cmdlet omite los miembros de un grupo de los resultados.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Property
Especifica las propiedades de agrupación. Los objetos se organizan en grupos con nombre en función del valor de las propiedades especificadas. Cuando no se especifica ninguna propiedad, los objetos se agrupan por su valor o por la ToString()
representación de su valor. La salida se presenta en orden en que se crearon los objetos de grupo.
El valor del parámetro Property puede ser una nueva propiedad calculada. La propiedad calculada puede ser un bloque de script o una tabla hash. Los pares clave-valor válidos son:
- Expresión:
<string>
o<script block>
Para obtener más información, consulte about_Calculated_Properties.
Tipo: | Object[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar cualquier objeto a este cmdlet.
Salidas
De forma predeterminada, este cmdlet devuelve un objeto GroupInfo .
Cuando se usa el parámetro AsHashTable , este cmdlet devuelve un objeto Hashtable .
Notas
Windows PowerShell incluye los siguientes alias para Group-Object
:
group
Puede usar el parámetro GroupBy de los cmdlets de formato, como Format-Table
y Format-List
, para agrupar objetos. A diferencia Group-Object
de , 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 agrupan sean del mismo tipo de Microsoft .NET.
Al agrupar objetos de diferentes tipos de .NET, Group-Object
usa las siguientes reglas:
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, los valores de propiedad se agrupan por 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 diferente en objetos diferentes,
Group-Object
usa el tipo .NET de la primera aparición de la propiedad como el tipo de .NET 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 no se pueden agrupar. Los objetos que no están agrupados aparecen en la salida final del objeto GroupInfo en un grupo denominado
AutomationNull.Value
.
Los grupos de salida se presentan en orden en que se crearon el grupo. Los elementos que pertenecen a cada grupo no se ordenan. Se muestran en el orden en que se recibieron.