Group-Object
Gruppiert Objekte, die denselben Wert für angegebene Eigenschaften enthalten.
Syntax
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Beschreibung
Das Cmdlet Group-Object
zeigt Objekte in Gruppen basierend auf dem Wert einer angegebenen Eigenschaft an.
Group-Object
gibt eine Tabelle mit einer Zeile für jeden Eigenschaftswert und eine Spalte zurück, in der die Anzahl der Elemente mit diesem Wert angezeigt wird.
Wenn Sie mehrere Eigenschaften angeben, Group-Object
sie zuerst nach den Werten der ersten Eigenschaft gruppiert, und gruppiert sie dann innerhalb jeder Eigenschaftsgruppe nach dem Wert der nächsten Eigenschaft.
Ab PowerShell 7 können Group-Object
die CaseSensitive kombinieren und AsHashtable Parametern kombinieren, um eine Hashtabelle mit Beachtung der Groß-/Kleinschreibung zu erstellen. Bei den Hashtabellenschlüsseln wird zwischen Groß- und Kleinschreibung unterschieden und ein System.Collections.Hashtable--Objekt ausgegeben.
Beispiele
Beispiel 1: Gruppieren von Dateien nach Erweiterung
In diesem Beispiel werden die Dateien rekursiv unter $PSHOME
abgerufen und nach Dateinamenerweiterung gruppiert. Die Ausgabe wird an das Cmdlet Sort-Object
gesendet, das sie nach den Anzahldateien sortiert, die für die angegebene Erweiterung gefunden wurden. Der leere Name stellt Verzeichnisse dar.
In diesem Beispiel wird der parameter NoElement verwendet, um die Mitglieder der Gruppe auszulassen.
$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
...
Beispiel 2: Gruppieren ganzzahliger Zahlen nach Ungerade und Geraden
In diesem Beispiel wird gezeigt, wie Skriptblöcke als Wert des Property-Parameters verwendet werden. Mit diesem Befehl werden die ganzzahligen Zahlen von 1 bis 20 angezeigt, gruppiert nach Ungerade und sogar.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Beispiel 3: Gruppieren von Hashtables nach Schlüsselwert
Ab PowerShell 6 unterstützt Group-Object
das Sortieren von Hashtabellen Eingabe nach Schlüsselwerten.
Im folgenden Beispiel wird ein Array von Hashtables nach dem Wert des weight
-Schlüssels der einzelnen Hashtables gruppiert.
In diesem Beispiel wird der parameter NoElement verwendet, um die Mitglieder der Gruppe auszulassen.
@(
@{ 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
Beispiel 4: Gruppieren von Ereignisprotokollereignissen nach EntryType
In diesem Beispiel werden die 1.000 neuesten Einträge im Systemereignisprotokoll angezeigt, gruppiert nach EntryType-.
In der Ausgabe stellt die Count Spalte die Anzahl der Einträge in jeder Gruppe dar. Die Spalte Name stellt die EventType- Werte dar, die eine Gruppe definieren. Die Spalte Gruppe stellt die Objekte in jeder Gruppe dar.
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...}
Beispiel 5: Gruppieren von Prozessen nach Prioritätsklasse
In diesem Beispiel wird die Auswirkung des NoElement--Parameters veranschaulicht. Diese Befehle gruppieren die Prozesse auf dem Computer nach Prioritätsklasse.
Der erste Befehl verwendet das Cmdlet Get-Process
, um die Prozesse auf dem Computer abzurufen und die Objekte an die Pipeline zu senden.
Group-Object
gruppiert die Objekte nach dem Wert der PriorityClass Eigenschaft des Prozesses.
Im zweiten Beispiel wird der parameter NoElement verwendet, um die Mitglieder der Gruppe aus der Ausgabe zu entfernen. Das Ergebnis ist eine Tabelle mit nur dem wert Count und Name Eigenschaftswert.
Die Ergebnisse werden in der folgenden Beispielausgabe angezeigt.
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
Beispiel 6: Gruppieren von Prozessen nach Name
Im folgenden Beispiel werden Group-Object
verwendet, um mehrere Instanzen von Prozessen zu gruppieren, die auf dem lokalen Computer ausgeführt werden.
Where-Object
zeigt Prozesse mit mehr als einer Instanz an.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Beispiel 7: Gruppieren von Objekten in einer Hashtabelle
In diesem Beispiel werden die Parameter AsHashTable und AsString verwendet, um die Gruppen in einer Hashtabelle als Sammlung von Schlüsselwertpaaren zurückzugeben.
In der resultierenden Hashtabelle ist jeder Eigenschaftswert ein Schlüssel, und die Gruppenelemente sind die Werte. Da jeder Schlüssel eine Eigenschaft des Hashtabellenobjekts ist, können Sie die Werte mithilfe der Punktnotation anzeigen.
Der erste Befehl ruft die Get
und Set
Cmdlets in der Sitzung ab, gruppiert sie nach Verb, gibt die Gruppen als Hashtabelle zurück und speichert die Hashtabelle in der $A
Variablen.
Der zweite Befehl zeigt die Hashtabelle in $A
an. Es gibt zwei Schlüssel-Wert-Paare, eines für die Get
Cmdlets und eines für die Set
-Cmdlets.
Der dritte Befehl verwendet Punktnotation, $A.Get
, um die Werte der Get-Taste in $A
anzuzeigen. Die Werte sind CmdletInfo-Objekt. Der AsString Parameter konvertiert die Objekte in den Gruppen nicht in Zeichenfolgen.
$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
...
Beispiel 8: Erstellen einer Hashtabelle mit Groß-/Kleinschreibung
In diesem Beispiel werden die Parameter CaseSensitive und AsHashTable- kombiniert, um eine Hashtabelle mit Groß-/Kleinschreibung zu erstellen. Die Dateien im Beispiel weisen Erweiterungen von .txt
und .TXT
auf.
$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}
Die $hash
Variable speichert das System.Collections.Hashtable-Objekt.
Get-ChildItem
ruft die Dateinamen aus dem verzeichnis C:\Files
ab und sendet die System.IO.FileInfo- Objekte an die Pipeline.
Group-Object
gruppiert die Objekte mithilfe des Property Werts Extension. Die parameter CaseSensitive und AsHashTable erstellen die Hashtabelle, und die Schlüssel werden mithilfe der schlüsselabhängigen Schlüssel .txt
und .TXT
gruppiert.
Parameter
-AsHashTable
Gibt an, dass dieses Cmdlet die Gruppe als Hashtabelle zurückgibt. Die Schlüssel der Hashtabelle sind die Eigenschaftswerte, nach denen die Objekte gruppiert werden. Die Werte der Hashtabelle sind die Objekte, die diesen Eigenschaftswert aufweisen.
Selbst gibt der AsHashTable Parameter jede Hashtabelle zurück, in der jeder Schlüssel eine Instanz des gruppierten Objekts ist. Bei Verwendung mit dem parameter AsString sind die Schlüssel in der Hashtabelle Zeichenfolgen.
Fügen Sie ab PowerShell 7 CaseSensitive und AsHashtable- in Ihrem Befehl ein, um zwischen Groß- und Kleinschreibung unterschiedene Hashtabellen zu erstellen.
Typ: | SwitchParameter |
Aliase: | AHT |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-AsString
Gibt an, dass dieses Cmdlet die Hashtabellenschlüssel in Zeichenfolgen konvertiert. Standardmäßig sind die Hashtabellenschlüssel Instanzen des gruppierten Objekts. Dieser Parameter ist nur gültig, wenn er mit dem parameter AsHashTable verwendet wird.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-CaseSensitive
Gibt an, dass mit diesem Cmdlet die Groß-/Kleinschreibung der Gruppierung beachtet wird. Ohne diesen Parameter können die Eigenschaftswerte von Objekten in einer Gruppe unterschiedliche Fälle aufweisen.
Fügen Sie ab PowerShell 7 CaseSensitive und AsHashtable- in Ihrem Befehl ein, um zwischen Groß- und Kleinschreibung unterschiedene Hashtabellen zu erstellen.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Culture
Gibt die Kultur an, die beim Vergleichen von Zeichenfolgen verwendet werden soll.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-InputObject
Gibt die zu gruppierenden Objekte an. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder Ausdruck ein, der die Objekte abruft.
Wenn Sie den parameter InputObject verwenden, um eine Auflistung von Objekten an Group-Object
zu senden, empfängt Group-Object
ein Objekt, das die Auflistung darstellt. Daher wird eine einzelne Gruppe mit diesem Objekt als Mitglied erstellt.
Um die Objekte in einer Auflistung zu gruppieren, führen Sie die Objekte an Group-Object
weiter.
Typ: | PSObject |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-NoElement
Gibt an, dass dieses Cmdlet die Mitglieder einer Gruppe aus den Ergebnissen ausgelassen.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Property
Gibt die Eigenschaften für die Gruppierung an. Die Objekte werden basierend auf dem Wert der angegebenen Eigenschaften in benannte Gruppen angeordnet. Wenn keine Eigenschaft angegeben wird, werden Objekte nach ihrem Wert oder der ToString()
Darstellung ihres Werts gruppiert. Die Ausgabe wird nach den Gruppennamen in aufsteigender Reihenfolge sortiert.
Der Wert des Property-Parameters kann eine neue berechnete Eigenschaft sein. Die berechnete Eigenschaft kann ein Skriptblock oder eine Hashtabelle sein. Gültige Schlüsselwertpaare sind:
- Ausdruck –
<string>
oder<script block>
Weitere Informationen finden Sie unter about_Calculated_Properties.
Typ: | Object[] |
Position: | 0 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
Sie können jedes Objekt an dieses Cmdlet weiterleiten.
Ausgaben
Standardmäßig gibt dieses Cmdlet ein GroupInfo-objekt zurück.
Wenn Sie den parameter AsHashTable verwenden, gibt dieses Cmdlet ein Hashtable--Objekt zurück.
Hinweise
PowerShell enthält die folgenden Aliase für Group-Object
:
- Alle Plattformen:
group
Sie können den parameter GroupBy der Formatierungs-Cmdlets wie Format-Table
und Format-List
verwenden, um Objekte zu gruppieren. Im Gegensatz zu Group-Object
, wodurch eine einzelne Tabelle mit einer Zeile für jeden Eigenschaftswert erstellt wird, erstellen die GroupBy Parameter eine Tabelle für jeden Eigenschaftswert mit einer Zeile für jedes Element mit dem Eigenschaftswert.
Group-Object
erfordert nicht, dass die gruppierten Objekte denselben Microsoft .NET-Typ aufweisen.
Beim Gruppieren von Objekten verschiedener .NET-Typen verwendet Group-Object
die folgenden Regeln:
Gleiche Eigenschaftsnamen und -typen.
Wenn die Objekte eine Eigenschaft mit dem angegebenen Namen haben und die Eigenschaftswerte denselben .NET-Typ aufweisen, werden die Eigenschaftswerte nach den gleichen Regeln gruppiert, die für Objekte desselben Typs verwendet werden.
Gleiche Eigenschaftsnamen, verschiedene Typen.
Wenn die Objekte eine Eigenschaft mit dem angegebenen Namen haben, aber die Eigenschaftswerte einen anderen .NET-Typ in verschiedenen Objekten aufweisen, verwendet
Group-Object
den .NET-Typ des ersten Vorkommens der Eigenschaft als .NET-Typ für diese Eigenschaftsgruppe. Wenn ein Objekt über eine Eigenschaft mit einem anderen Typ verfügt, wird der Eigenschaftswert in den Typ für diese Gruppe konvertiert. Wenn die Typkonvertierung fehlschlägt, ist das Objekt nicht in der Gruppe enthalten.Fehlende Eigenschaften.
Objekte, die nicht über eine angegebene Eigenschaft verfügen, können nicht gruppiert werden. Objekte, die nicht gruppiert sind, werden in der endgültigen GroupInfo- Objektausgabe in einer Gruppe mit dem Namen
AutomationNull.Value
angezeigt.
Die Ausgabe wird nach den Gruppennamen in aufsteigender Reihenfolge sortiert. Die Elemente, die zu jeder Gruppe gehören, werden nicht sortiert. Sie werden in der Reihenfolge aufgeführt, in der sie empfangen wurden.