Group-Object

Regroupe les objets qui contiennent la même valeur pour les propriétés spécifiées.

Syntaxe

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

Description

L'applet de commande Group-Object affiche les 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 indiquant le nombre d'éléments possédant cette valeur.

Si vous spécifiez plusieurs propriétés, Group-Object commence par les grouper en fonction des valeurs de la première propriété, puis, au sein de chaque groupe de propriétés, elle génère des groupes basés sur la valeur de la propriété suivante.

Paramètres

-AsHashTable

Retourne le groupe sous la forme d'une table de hachage. Les clés de la table de hachage sont les valeurs de propriété en fonction desquelles les objets sont groupés. Les valeurs de la table de hachage sont les objets possédant cette valeur de propriété.

Le paramètre AsHashTable retourne chaque table de hachage dans laquelle chaque clé est une instance de l'objet groupé. S'il est utilisé avec le paramètre AsString, les clés de la table de hachage sont des chaînes.

Obligatoire ?

false

Position ?

named

Valeur par défaut

GroupInfo object

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-AsString

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.

Obligatoire ?

false

Position ?

named

Valeur par défaut

GroupInfo objects

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-CaseSensitive

Rend le regroupement sensible à la casse. Sans ce paramètre, les valeurs de propriété des objets d'un groupe peuvent avoir des casses différentes.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-Culture <string>

Spécifie la culture à utiliser lors de la comparaison de chaînes.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-InputObject <psobject>

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 représentant la collection. En conséquence, elle crée un groupe unique avec cet objet en tant que membre.

Pour regrouper les objets dans une collection, dirigez-les vers Group-Object.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

true (ByValue)

Accepter les caractères génériques ?

false

-NoElement

Omet les membres d'un groupe des résultats.

Obligatoire ?

false

Position ?

named

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

-Property <Object[]>

Spécifie les propriétés du 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. Pour créer une propriété calculée, créez une table de hachage avec une clé Expression spécifiant une valeur de chaîne ou de bloc de script.

Obligatoire ?

false

Position ?

1

Valeur par défaut

Accepter l'entrée de pipeline ?

false

Accepter les caractères génériques ?

false

<CommonParameters>

Cette applet de commande prend en charge les paramètres courants : -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer et -OutVariable. Pour plus d'informations, consultez about_Commonparameters.

Entrées et sorties

Le type d'entrée est le type des objets que vous pouvez diriger vers l'applet de commande. Le type de retour est le type des objets que l'applet de commande retourne.

Entrées

System.Management.Automation.PSObject

Vous pouvez diriger n'importe quel objet vers Group-Object.

Sorties

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

Lorsque vous utilisez le paramètre AsHashTable, Group-Object retourne une table de hachage. Sinon, elle retourne un objet GroupInfo.

Remarques

Vous pouvez également utiliser le paramètre GroupBy des applets de commande de mise en forme (telles que Format-Table [m2] et Format-List [m2]) 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 possédant la valeur de propriété.

Group-Object ne requiert pas que les objets regroupés soient du même type Microsoft .NET Framework. Lors du regroupement d'objets possédant des types .NET Framework différents, Group-Object respecte les règles suivantes :

-- Mêmes noms de propriété et types : si les objets possèdent une propriété portant le nom spécifié, et si les valeurs de propriété sont du même type .NET Framework, les valeurs de propriété sont regroupées à l'aide des mêmes règles qui seraient utilisées pour des objets de même type.

-- Mêmes noms de propriété, types différents : si les objets possèdent une propriété ayant le nom spécifié, mais si les valeurs de propriété sont de types .NET Framework différents dans les différents objets, Group-Object utilise le type .NET Framework de la première occurrence de la propriété en tant que type .NET Framework du groupe de propriétés. Lorsqu'un objet possède une propriété avec un type différent, la valeur de propriété est convertie en le type du groupe. Si la conversion de type échoue, l'objet n'est pas inclus dans le groupe.

-- Missing Properties : les objets qui n'ont pas de propriété spécifiée sont considérés comme ne pouvant pas être regroupés. Les objets qui ne peuvent pas être regroupés (Ungroupable) apparaissent dans la dernière sortie de l'objet GroupInfo dans un groupe nommé AutomationNull.Value.

Exemple 1

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

Description
-----------
Cette commande obtient les fichiers de l'emplacement actuel possédant une extension .doc et les regroupe par taille.





Exemple 2

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

Description
-----------
Cette commande obtient les fichiers de l'emplacement actuel, les trie en fonction de leur extension de nom de fichier, puis les groupe par extension. Notez que les fichiers sont triés avant d'être groupés.





Exemple 3

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

Description
-----------
Cet exemple montre comment utiliser des blocs de script en tant que valeur du paramètre Property. 

Cette commande affiche les entiers de 1 à 35, regroupés en fonction de leur reste lorsqu'ils sont divisés par 2 ou 3.





Exemple 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}

Description
-----------
Ces commandes affichent les 1 000 entrées les plus récentes du journal des événements système, regroupées par ID d'événement. 

La première commande utilise l'applet de commande Get-EventLog pour récupérer les événements et l'opérateur d'affectation (=) pour les enregistrer dans la variable $events. 

La deuxième commande utilise un opérateur de pipeline (|) pour envoyer les événements de la variable $events à l'applet de commande Group-Object. Elle utilise le paramètre Property pour indiquer que les événements doivent être regroupés en fonction de la valeur de leur propriété EventID. 

Dans la sortie, la colonne Count représente le nombre d'entrées de chaque groupe, la colonne Name représente les valeurs EventID qui définissent un groupe et la colonne Group représente les objets de chaque groupe.





Exemple 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

Description
-----------
Cet exemple illustre l'utilisation du paramètre NoElement. Ces commandes regroupent les processus de l'ordinateur en fonction de leur classe de priorité.

La première commande utilise l'applet de commande Get-Process pour obtenir les processus de l'ordinateur. Elle utilise un opérateur de pipeline (|) pour envoyer les résultats à Group-Object, qui groupe les objets en fonction de la valeur de la propriété PriorityClass du processus.

La deuxième commande est identique à la première, à ceci près qu'elle utilise le paramètre NoElement pour éliminer les membres du groupe de la sortie. Le résultat obtenu est une table contenant uniquement le nombre et le nom des valeurs de propriété.

Les résultats sont présentés dans l'exemple de sortie suivant.





Exemple 6

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

Description
-----------
Cette commande montre comment fournir la valeur du paramètre Property en tant que bloc de script.

Cette commande affiche les 1 000 entrées les plus récentes du journal des événements système, regroupées par heure, entre le moment où elles ont été générées et le moment où elles ont été écrites dans le journal. 

La première commande utilise l'applet de commande Get-EventLog pour obtenir les entrées du journal des événements. Elle utilise un opérateur de pipeline (|) pour envoyer les entrées à l'applet de commande Group-Object. La valeur du paramètre Property est spécifiée en tant que bloc de script (une expression entre accolades). Le résultat de l'évaluation du bloc de script correspond à l'heure comprise entre le moment où l'entrée de fichier journal a été générée et le moment où elle a été écrite dans le journal. Cette valeur est utilisée pour regrouper les 1 000 événements les plus récents.





Exemple 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

Description
-----------
Cette commande groupe les éléments du répertoire actif en fonction de leur extension de nom de fichier. Elle utilise le paramètre NoElement pour omettre les membres du groupe.

Les résultats sont présentés dans l'exemple de sortie suivant.





Exemple 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

Description
-----------
Cet exemple montre comment rechercher les valeurs de propriété uniques et non uniques (répétées) d'une collection. 

La première commande obtient les éléments uniques d'un tableau en dirigeant ce tableau vers l'applet de commande Get-Unique.

La deuxième commande obtient les éléments non uniques du tableau. Elle dirige le tableau vers l'applet de commande Group-Object, qui groupe les objets en fonction de leur valeur. Les groupes obtenus sont dirigés vers l'applet de commande Where-Object, qui sélectionne les objets des groupes comportant plusieurs membres.

La troisième commande illustre une utilisation pratique de cette technique. Elle utilise la même méthode pour rechercher des processus de même nom sur l'ordinateur.

Les résultats sont présentés dans l'exemple de sortie suivant.





Exemple 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...
...

Description
-----------
Cet exemple utilise les paramètres AsHashTable et AsString pour retourner les groupes d'une table de hachage, à savoir sous la forme d'une collection de paires clé-valeur. 

Dans la table de hachage obtenue, 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 point pour afficher les valeurs.

La première commande obtient les applets de commande Get et Set de la session, les groupe par verbe, retourne les groupes sous la forme d'une table de hachage, puis enregistre la table de hachage dans la variable $a. 

La deuxième commande affiche la table de hachage dans la variable $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 point pour afficher les valeurs de la clé Get dans la variable $a. Ces valeurs sont l'objet CmdletInfo. Le paramètre AsString ne convertit pas les objets des groupes en chaînes.