Group-Object
Gruppiert Objekte, die den gleichen Wert für die angegebenen Eigenschaften enthalten.
Syntax
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Beschreibung
Das Group-Object
Cmdlet 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 einer Spalte zurück, in der die Anzahl der Elemente mit diesem Wert angezeigt wird.
Wenn Sie mehr als eine Eigenschaft angeben, Group-Object
gruppiert sie zuerst nach den Werten der ersten Eigenschaft und gruppiert sie dann innerhalb jeder Eigenschaftengruppe nach dem Wert der nächsten Eigenschaft.
Beispiele
Beispiel 1: Gruppierung von Dateien nach Erweiterung
In diesem Beispiel werden die Dateien unter $PSHOME
rekursiv abgerufen und nach Dateinamenerweiterung gruppiert. Die Ausgabe wird an das Sort-Object
Cmdlet 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 NoElement-Parameter 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 ganzer Zahlen nach Quoten und Geraden
In diesem Beispiel wird gezeigt, wie Skriptblöcke als Wert des Property-Parameters verwendet werden.
Mit diesem Befehl werden die ganzen Zahlen von 1 bis 20 angezeigt, gruppiert nach Quoten und geraden Zahlen.
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}
Beispiel 3: Gruppieren von Ereignisprotokollereignissen nach EntryType
Diese Befehle zeigen die 1.000 letzten Einträge im Systemereignisprotokoll an, gruppiert nach EntryType.
In der Ausgabe stellt die Spalte Count die Anzahl der Einträge in jeder Gruppe dar, die Spalte Name die EventType-Werte , die eine Gruppe definieren, und die Spalte Group 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.Diagnostics.�
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
Beispiel 4: Gruppierung 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 Get-Process
Cmdlet, um die Prozesse auf dem Computer abzurufen.
Es verwendet einen Pipelineoperator |
, um die Ergebnisse an zu Group-Object
senden, der die Objekte nach dem Wert der PriorityClass-Eigenschaft des Prozesses gruppiert.
Der zweite Befehl ist mit dem ersten identisch, mit dem Unterschied, dass er den NoElement-Parameter verwendet, um die Mitglieder der Gruppe aus der Ausgabe zu entfernen. Das Ergebnis ist eine Tabelle, die nur die Anzahl und den Namen des Eigenschaftswerts enthält.
Die Ergebnisse werden in der folgenden Beispielausgabe gezeigt.
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 5: Gruppierung von Prozessen nach Namen
Im folgenden Beispiel werden Group-Object
mehrere Instanzen von Prozessen verwendet, die auf dem lokalen Computer ausgeführt werden.
Get-Process | Group-Object -Property Name -NoElement | Where {$_.count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Beispiel 8: Gruppieren von Objekten in einer Hashtabelle
In diesem Beispiel werden die Parameter AsHashTable und AsString verwendet, um die Gruppen in einer Hashtabelle zurückzugeben, d. h. als Sammlung von Schlüssel-Wert-Paaren.
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 punktierten Schreibweise anzeigen.
Der erste Befehl ruft die Get
Cmdlets und Set
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 die Punktnotation, 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-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...
...
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.
Der AsHashTable-Parameter selbst gibt jede Hashtabelle zurück, in der jeder Schlüssel ein instance des gruppierten Objekts ist. Bei Verwendung mit dem AsString-Parameter sind die Schlüssel in der Hashtabelle Zeichenfolgen.
Type: | SwitchParameter |
Aliases: | AHT |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-AsString
Gibt an, dass dieses Cmdlet die Hashtabellenschlüssel in Zeichenfolgen konvertiert. Standardmäßig sind die Schlüssel in der Hashtabelle Instanzen des gruppierten Objekts. Dieser Parameter ist nur gültig, wenn er mit dem AsHashTable-Parameter verwendet wird.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CaseSensitive
Gibt an, dass dieses Cmdlet die Groß-/Kleinschreibung bei der Gruppierung beachtet. Ohne diesen Parameter können die Eigenschaftswerte von Objekten in einer Gruppe groß- oder kleingeschrieben sein.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Gibt die Kultur an, die beim Vergleichen von Zeichenfolgen verwendet werden soll.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Gibt die zu gruppierenden Objekte an. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, mit dem die Objekte abgerufen werden.
Wenn Sie den InputObject-Parameter verwenden, um eine Auflistung von -Objekten an zu Group-Object
übermitteln, Group-Object
empfängt ein -Objekt, das die Auflistung darstellt.
Daher erstellt es eine einzelne Gruppe mit diesem Objekt als Member.
Um die Objekte in einer Auflistung zu gruppieren, leiten Sie die -Objekte an weiter Group-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoElement
Gibt an, dass dieses Cmdlet die Mitglieder einer Gruppe aus den Ergebnissen auslässt.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Gibt die Eigenschaften für die Gruppierung an. Die Objekte werden basierend auf dem Wert der angegebenen Eigenschaft in Gruppen angeordnet.
Der Wert des Property-Parameters kann eine neue berechnete Eigenschaft sein. Um eine berechnete Eigenschaft zu erstellen, erstellen Sie eine Hashtabelle mit einem Ausdrucksschlüssel , der einen Zeichenfolgen- oder Skriptblockwert angibt.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können jedes Objekt an übergeben Group-Object
.
Ausgaben
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
Wenn Sie den AsHashTable-Parameter verwenden, Group-Object
gibt eine Hashtabelle zurück.
Andernfalls wird ein GroupInfo-Objekt zurückgegeben.
Hinweise
Sie können auch den GroupBy-Parameter der Formatierungs-Cmdlets (z
Format-Table
. B. undFormat-List
) verwenden, um Objekte zu gruppieren. Im Gegensatz zuGroup-Object
, das eine einzelne Tabelle mit einer Zeile für jeden Eigenschaftswert erstellt, erstellen die GroupBy-Parameter eine Tabelle für jeden Eigenschaftswert mit einer Zeile für jedes Element, das den Eigenschaftswert hat.Group-Object
erfordert nicht, dass die gruppierten Objekte denselben Microsoft-.NET Framework-Typ aufweisen. Beim Gruppieren von Objekten unterschiedlicher .NET Framework TypenGroup-Object
werden die folgenden Regeln verwendet:Gleiche Eigenschaftsnamen und -typen. Wenn die Objekte über eine Eigenschaft mit dem angegebenen Namen verfügen und die Eigenschaftswerte denselben .NET Framework-Typ aufweisen, werden die Eigenschaftswerte nach den gleichen Regeln wie für Objekte desselben Typs gruppiert.
Gleiche Eigenschaftsnamen, unterschiedliche Typen. Wenn die Objekte über eine Eigenschaft mit dem angegebenen Namen verfügen, die Eigenschaftswerte jedoch einen anderen .NET Framework Typ in verschiedenen Objekten aufweisen,
Group-Object
verwendet den .NET Framework Typ des ersten Vorkommens der Eigenschaft als .NET Framework Typ für diese Eigenschaftengruppe. Wenn ein Objekt eine Eigenschaft mit einem anderen Typ aufweist, wird der Eigenschaftswert in den Typ für diese Gruppe konvertiert. Wenn bei der Typkonvertierung ein Fehler auftritt, ist das Objekt nicht in der Gruppe enthalten.Fehlende Eigenschaften. Objekte, die eine angegebene Eigenschaft nicht aufweisen, werden als nicht gruppierbar betrachtet. Nicht gruppierbare Objekte werden in der endgültigen GroupInfo-Objektausgabe in einer Gruppe namens
AutomationNull.Value
angezeigt.