Group-Object
Regroupe les objets qui contiennent la même valeur pour les propriétés spécifiées.
Syntaxe
HashTable
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
L’applet de commande Group-Object affiche des objets dans des groupes en fonction de la valeur d’une propriété spécifiée.
Group-Object retourne une table avec une ligne pour chaque valeur de propriété et une colonne qui affiche le nombre d’éléments avec cette valeur.
Si vous spécifiez plusieurs propriétés, Group-Object les regroupe d’abord par les valeurs de la première propriété, puis, dans chaque groupe de propriétés, elle les regroupe par la valeur de la propriété suivante.
À compter de PowerShell 7, Group-Object peut combiner les paramètres CaseSensitive et AsHashtable pour créer une table de hachage respectant la casse. Les clés de table de hachage utilisent des comparaisons sensibles à la casse et génèrent un objet System.Collections.Hashtable .
Exemples
Exemple 1 : Regrouper des fichiers par extension
Cet exemple obtient de manière récursive les fichiers sous $PSHOME et les regroupe par extension de nom de fichier. La sortie est envoyée à l’applet de commande Sort-Object, qui les trie en fonction du nombre de fichiers trouvés pour l’extension donnée. Le nom vide représente les répertoires.
Cet exemple utilise le paramètre noElement
$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
...
Exemple 2 : Regrouper des entiers par cotes et paires
Cet exemple montre comment utiliser des blocs de script comme valeur du paramètre Property
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Exemple 3 : Regrouper les tables de hachage par valeur de clé
À compter de PowerShell 6, Group-Object prend en charge le tri des entrées de table de hachage par valeurs de clé.
L’exemple suivant regroupe un tableau de tables de hachage par la valeur de la clé de chaque table de weight hachage.
Cet exemple utilise le paramètre noElement
@(
@{ 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
Exemple 4 : Regrouper les événements du journal des événements par EntryType
Cet exemple montre comment afficher les 1 000 entrées les plus récentes dans le journal des événements système, regroupées par EntryType.
Dans la sortie, la colonne Count représente le nombre d’entrées dans chaque groupe. La colonne Name représente les valeurs EventType qui définissent un groupe. La colonne Group représente les objets de chaque groupe.
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...}
Exemple 5 : Regrouper les processus par classe de priorité
Cet exemple illustre l’effet du paramètre NoElement. Ces commandes regroupent les processus sur l’ordinateur par classe de priorité.
La première commande utilise l’applet de commande Get-Process pour obtenir les processus sur l’ordinateur et envoyer les objets vers le bas du pipeline.
Group-Objectregroupe les objets par la valeur de la propriété PriorityClass du processus.
Le deuxième exemple utilise le paramètre NoElement pour supprimer les membres du groupe de la sortie. Le résultat est une table avec uniquement la valeur de propriété count et Name.
Les résultats sont affichés dans l’exemple de sortie suivant.
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
Exemple 6 : Regrouper les processus par nom
L’exemple suivant utilise Group-Object pour regrouper plusieurs instances de processus s’exécutant sur l’ordinateur local.
Where-Object affiche les processus avec plusieurs instances.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Exemple 7 : Regrouper des objets dans une table de hachage
Cet exemple utilise les paramètres AsHashTable et AsString pour renvoyer les groupes dans une table de hachage, sous la forme d’une collection de paires clé-valeur.
Dans la table de hachage résultante, chaque valeur de propriété est une clé et les éléments de groupe sont les valeurs. Étant donné que chaque clé est une propriété de l’objet table de hachage, vous pouvez utiliser la notation par points pour afficher les valeurs.
La première commande obtient les applets de commande Get et Set dans la session, les regroupe par verbe, retourne les groupes sous forme de table de hachage et enregistre la table de hachage dans la variable $A.
La deuxième commande affiche la table de hachage dans $A. Il existe deux paires clé-valeur, une pour les applets de commande Get et une pour les applets de commande Set.
La troisième commande utilise la notation par points, $A.Get pour afficher les valeurs de la clé Obtenir dans $A. Les valeurs sont CmdletInfo objet. Le paramètre AsString ne convertit pas les objets dans les groupes en chaînes.
$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
...
Exemple 8 : Créer une table de hachage sensible à la casse
Cet exemple combine les paramètres CaseSensitive et AsHashTable pour créer une table de hachage respectant la casse. Les fichiers de l’exemple ont des extensions et .txt.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}
La $hash variable stocke l’objet System.Collections.Hashtable .
Get-ChildItem obtient les noms de fichiers du C:\Files répertoire et envoie les objets System.IO.FileInfo vers le bas du pipeline.
Group-Objectregroupe les objets à l’aide de l’extensionde valeur de propriété. Les paramètres CaseSensitive et AsHashTable créent la table de hachage et les clés sont regroupées à l’aide des clés .txt sensibles à la casse et .TXT.
Paramètres
-AsHashTable
Indique que cette applet de commande retourne le groupe sous forme de table de hachage. Les clés de la table de hachage sont les valeurs de propriété par lesquelles les objets sont regroupés. Les valeurs de la table de hachage sont les objets qui ont cette valeur de propriété.
En soi, le paramètre AsHashTable retourne chaque table de hachage dans laquelle chaque clé est une instance de l’objet groupé. Lorsqu’elles sont utilisées avec le paramètre AsString, les clés de la table de hachage sont des chaînes.
À compter de PowerShell 7, pour créer des tables de hachage sensibles à la casse, incluez CaseSensitive et AsHashtable dans votre commande.
Propriétés du paramètre
| Type: | SwitchParameter |
| Valeur par défaut: | False |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
| Alias: | AHT |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-AsString
Indique que cette applet de commande convertit les clés de table de hachage en chaînes. Par défaut, les clés de table de hachage sont des instances de l’objet groupé. Ce paramètre est valide uniquement lorsqu’il est utilisé avec le paramètre AsHashTable.
Propriétés du paramètre
| Type: | SwitchParameter |
| Valeur par défaut: | False |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-CaseSensitive
Indique que cette applet de commande rend le regroupement sensible à la casse. Sans ce paramètre, les valeurs de propriété des objets d’un groupe peuvent avoir des cas différents.
À compter de PowerShell 7, pour créer des tables de hachage sensibles à la casse, incluez CaseSensitive et AsHashtable dans votre commande.
Propriétés du paramètre
| Type: | SwitchParameter |
| Valeur par défaut: | False |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-Culture
Spécifie la culture à utiliser lors de la comparaison de chaînes.
Propriétés du paramètre
| Type: | String |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-InputObject
Spécifie les objets à regrouper. Entrez une variable qui contient les objets, ou tapez une commande ou une expression qui obtient les objets.
Lorsque vous utilisez le paramètre InputObject pour envoyer une collection d’objets à Group-Object, Group-Object reçoit un objet qui représente la collection. Par conséquent, il crée un groupe unique avec cet objet en tant que membre.
Pour regrouper les objets d’une collection, dirigez les objets vers Group-Object.
Propriétés du paramètre
| Type: | PSObject |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | True |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-NoElement
Indique que cette applet de commande omet les membres d’un groupe à partir des résultats.
Propriétés du paramètre
| Type: | SwitchParameter |
| Valeur par défaut: | False |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
(All)
| Position: | Named |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
-Property
Spécifie les propriétés de regroupement. Les objets sont organisés en groupes nommés en fonction de la valeur des propriétés spécifiées. Lorsqu’aucune propriété n’est spécifiée, les objets sont regroupés par leur valeur ou la représentation ToString() de leur valeur. La sortie est triée par ordre croissant par les noms de groupe.
La valeur du paramètre Property
- Expression -
<string>ou<script block>
Pour plus d'informations, voir about_Calculated_Properties.
Propriétés du paramètre
| Type: | Object[] |
| Valeur par défaut: | None |
| Prend en charge les caractères génériques: | False |
| DontShow: | False |
Jeux de paramètres
(All)
| Position: | 0 |
| Obligatoire: | False |
| Valeur du pipeline: | False |
| Valeur du pipeline par nom de propriété: | False |
| Valeur des arguments restants: | False |
CommonParameters
Cette applet de commande prend en charge les paramètres courants : -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction et -WarningVariable. Pour plus d’informations, consultez about_CommonParameters.
Entrées
PSObject
Vous pouvez diriger n’importe quel objet vers cette applet de commande.
Sorties
GroupInfo
Par défaut, cette applet de commande retourne un objet GroupInfo.
Hashtable
Lorsque vous utilisez le paramètre AsHashTable, cette applet de commande retourne un objet hashtable.
Notes
PowerShell inclut les alias suivants pour Group-Object:
- Toutes les plateformes :
group
Vous pouvez utiliser le paramètre GroupBy des applets de commande de mise en forme, telles que Format-Table et Format-List, pour regrouper des objets. Contrairement à Group-Object, qui crée une table unique avec une ligne pour chaque valeur de propriété, les paramètres GroupBy créent une table pour chaque valeur de propriété avec une ligne pour chaque élément ayant la valeur de propriété.
Group-Object ne nécessite pas que les objets regroupés soient du même type Microsoft .NET.
Lors du regroupement d’objets de différents types .NET, Group-Object utilise les règles suivantes :
Mêmes noms et types de propriétés.
Si les objets ont une propriété portant le nom spécifié et que les valeurs de propriété ont le même type .NET, les valeurs de propriété sont regroupées par les mêmes règles que celles qui seraient utilisées pour les objets du même type.
Mêmes noms de propriété, différents types.
Si les objets ont une propriété portant le nom spécifié, mais que les valeurs de propriété ont un autre type .NET dans différents objets,
Group-Objectutilise le type .NET de la première occurrence de la propriété comme type .NET pour ce groupe de propriétés. Lorsqu’un objet a une propriété avec un type différent, la valeur de propriété est convertie en type pour ce groupe. Si la conversion de type échoue, l’objet n’est pas inclus dans le groupe.Propriétés manquantes.
Les objets qui n’ont pas de propriété spécifiée ne peuvent pas être regroupés. Les objets qui ne sont pas regroupés apparaissent dans la sortie de l’objet GroupInfo finale dans un groupe nommé
AutomationNull.Value.
La sortie est triée par ordre croissant par les noms de groupe. Les éléments appartenant à chaque groupe ne sont pas triés. Ils sont répertoriés dans l’ordre dans lequel ils ont été reçus.