Partager via


Group-Object

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

Syntaxe

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.

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 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 des entiers par cotes et paires

Cet exemple montre comment utiliser des blocs de script comme valeur du paramètre Property .

Cette commande affiche les entiers compris entre 1 et 20, regroupés par cotes et même.

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}

Exemple 3 : Regrouper les événements du journal des événements par EntryType

Ces commandes affichent 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, et 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.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 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. Il utilise un opérateur de pipeline | pour envoyer les résultats à Group-Object, qui regroupe les objets par la valeur de la propriété PriorityClass du processus.

La deuxième commande est identique à la première, sauf qu’elle utilise le paramètre NoElement pour éliminer les membres du groupe de la sortie. Le résultat est une table avec uniquement le nombre et le nom de la valeur de propriété.

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 5 : Regrouper les processus par nom

L’exemple suivant utilise Group-Object à plusieurs instances de processus s’exécutant sur l’ordinateur local.

Get-Process | Group-Object -Property Name -NoElement | Where {$_.count -gt 1}

Count Name
----- ----
2     csrss
5     svchost
2     winlogon
2     wmiprvse

Exemple 8 : 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, autrement dit 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. É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 pour afficher les valeurs de la clé Get dans . 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-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...
...

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.

Type:SwitchParameter
Alias:AHT
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Culture

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

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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.

Type:PSObject
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-NoElement

Indique que cette applet de commande omet les membres d’un groupe à partir des résultats.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Property

Spécifie les propriétés de 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 Expression clé qui spécifie une valeur de bloc de chaîne ou de script.

Type:Object[]
Position:0
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

PSObject

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 une table de hachage. Sinon, elle retourne un objet GroupInfo.

Notes

  • Vous pouvez également 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 Framework. Lors du regroupement d’objets de différents types .NET Framework, 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 Framework, les valeurs de propriété sont regroupées à l’aide des mêmes règles que celles 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 type .NET Framework différent dans différents objets, Group-Object utilise le type .NET Framework de la première occurrence de la propriété comme type .NET Framework 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 sont considérés comme non groupables. Les objets dissociables apparaissent dans la sortie finale objet GroupInfo dans un groupe nommé AutomationNull.Value.