Group-Object
Groupe les objets qui contiennent la même valeur pour les propriétés spécifiées.
Syntax
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
L’applet Group-Object
de commande 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
commencez par les regrouper par les valeurs de la première propriété, puis, dans chaque groupe de propriétés, il les regroupe par la valeur de la propriété suivante.
À partir de PowerShell 7, Group-Object
vous pouvez 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 respectant la casse et génèrent un objet System.Collections.Hashtable .
Exemples
Exemple 1 : Regrouper des fichiers par extension
Cet exemple récupère 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 Sort-Object
de commande, 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 pour omettre les membres du groupe.
$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 les entiers par probabilités et paires
Cet exemple montre comment utiliser des blocs de script comme valeur du paramètre Property . Cette commande affiche les entiers de 1 à 20, regroupés par probabilités et pairs.
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 é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 Type d’entrée.
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 Groupe 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.Diagnostics...}
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics...}
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics...}
Exemple 4 : Regrouper les processus par classe de priorité
Cet exemple illustre l’effet du paramètre NoElement . Ces commandes regroupent les processus en cours d'exécution sur l'ordinateur par classe de priorité.
La première commande utilise l’applet de Get-Process
commande pour obtenir les processus sur l’ordinateur et envoyer les objets dans le pipeline. Group-Object
regroupe les objets en fonction de la valeur de la propriété PriorityClass du processus.
Le deuxième exemple utilise le paramètre NoElement pour éliminer les membres du groupe de la sortie. Le résultat est une table avec uniquement la valeur de la propriété Count et Name .
Les résultats sont présenté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 5 : 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 instance.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Exemple 6 : Regrouper des objets dans une table de hachage
Cet exemple utilise les paramètres AsHashTable et AsString pour retourner les groupes d’une table de hachage, en tant que 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. Comme chaque clé est une propriété de l'objet de table de hachage, vous pouvez utiliser la notation par points pour afficher les valeurs.
La première commande obtient les Get
applets de commande 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 $A
variable.
La deuxième commande affiche la table de hachage dans $A
. Il existe deux paires clé-valeur, l’une pour les Get
applets de commande et l’autre pour les applets de Set
commande.
La troisième commande utilise la notation $A.Get
par points pour afficher les valeurs de la clé Get dans $A
. Les valeurs sont l’objet CmdletInfo . Le paramètre AsString ne convertit pas les objets des 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 7 : Create une table de hachage respectant 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 de .txt
et .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 dans le pipeline. Group-Object
regroupe les objets à l’aide de l’extensionproperty value. 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
respectant la casse et .TXT
.
Paramètres
-AsHashTable
Indique que cette applet de commande retourne le groupe sous la forme d’une table de hachage. Les clés de la table de hachage sont les valeurs des propriétés selon lesquelles les objets sont regroupés. Les valeurs de la table de hachage sont les objets qui ont cette valeur de propriété.
Par lui-même, 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.
À partir de PowerShell 7, pour créer des tables de hachage respectant la casse, incluez CaseSensitive et AsHashtable dans votre commande.
Type: | SwitchParameter |
Aliases: | AHT |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 d'une table de hachage sont des instances de l'objet regroupé. Ce paramètre est valide uniquement lorsqu’il est utilisé avec le paramètre AsHashTable .
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CaseSensitive
Indique que cette applet de commande respecte la casse du regroupement. Sans ce paramètre, les valeurs des propriétés des objets dans un groupe peuvent avoir des casses différentes.
À partir de PowerShell 7, pour créer des tables de hachage respectant la casse, incluez CaseSensitive et AsHashtable dans votre commande.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Spécifie la culture à utiliser lors de la comparaison de chaînes.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Spécifie les objets à regrouper. Entrez une variable contenant les objets, ou tapez une commande ou une expression qui obtient ces 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. Elle crée donc un seul groupe avec cet objet comme membre.
Pour regrouper les objets d’une collection, dirigez les objets vers Group-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoElement
Indique que cette applet de commande omet les membres d’un groupe des résultats.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Spécifie les propriétés pour le regroupement. Les objets sont organisés en groupes en fonction de la valeur de la propriété spécifiée.
La valeur du paramètre Property peut être une nouvelle propriété calculée. La propriété calculée peut être un bloc de script ou une table de hachage. Les paires clé-valeur valides sont les suivantes :
- Expression -
<string>
ou<script block>
Pour plus d’informations, consultez about_Calculated_Properties.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
Vous pouvez diriger n’importe quel objet vers Group-Object
.
Sorties
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
Lorsque vous utilisez le paramètre AsHashTable , Group-Object
retourne un objet Hashtable .
Sinon, il retourne un objet GroupInfo .
Notes
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 qui a la valeur de propriété.
Group-Object
n’exige pas que les objets regroupés soient du même type Microsoft .NET Core. Lors du regroupement d’objets de différents types .NET Core, 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 Core, les valeurs de propriété sont regroupées à l’aide des mêmes règles que celles qui seraient utilisées pour les objets du même type.
Mêmes noms de propriétés, types différents.
Si les objets ont une propriété portant le nom spécifié, mais que les valeurs de propriété ont un type .NET Core différent dans différents objets,
Group-Object
utilise le type .NET Core de la première occurrence de la propriété comme type .NET Core pour ce groupe de propriétés. Quand un objet a une propriété avec un type différent, la valeur de la propriété est convertie vers le type de 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 finale de l’objet GroupInfo dans un groupe nommé
AutomationNull.Value
.