Gruppiert Objekte, die für die angegebenen Eigenschaften denselben Wert enthalten.
Syntax
Group-Object [-AsHashTable] [-AsString] [[-Eigenschaft] <Object[]>] [-CaseSensitive] [-Culture <string>] [-InputObject <psobject>] [-NoElement] [<CommonParameters>]
Beschreibung
Mit dem Cmdlet "Group-Object" werden Objekte in Gruppen auf Grundlage des Werts einer angegebenen Eigenschaft angezeigt. Group-Object gibt eine Tabelle mit einer Zeile für jeden Eigenschaftenwert und einer Spalte zurück, in der die Anzahl der Elemente mit dem jeweiligen Wert angezeigt wird.
Wenn Sie mehrere Eigenschaften angeben, werden diese von Group-Object zunächst nach den Werten der ersten Eigenschaft und dann nach dem Wert der nächsten Eigenschaft innerhalb jeder Eigenschaftengruppe gruppiert.
Parameter
-AsHashTable
Gibt die Gruppe als Hashtabelle zurück. Die Schlüssel der Hashtabelle sind die Eigenschaftenwerte, nach denen die Objekte gruppiert werden. Die Werte der Hashtabelle sind die Objekte, die über den jeweiligen Eigenschaftenwert verfügen.
Mit dem AsHashTable-Parameter wird jede Hashtabelle zurückgegeben, in der jeder Schlüssel eine Instanz des gruppierten Objekts ist. Wenn der Parameter mit dem AsString-Parameter verwendet wird, sind die Schlüssel in der Hashtabelle Zeichenfolgen.
Erforderlich? |
false |
Position? |
named |
Standardwert |
GroupInfo object |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-AsString
Konvertiert die Hashtabellenschlüssel in Zeichenfolgen. Standardmäßig sind die Hashtabellenschlüssel Instanzen des gruppierten Objekts. Dieser Parameter ist nur gültig, wenn er mit dem AsHashTable-Parameter verwendet wird.
Erforderlich? |
false |
Position? |
named |
Standardwert |
GroupInfo objects |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-CaseSensitive
Legt fest, dass für die Gruppierung die Groß-/Kleinschreibung berücksichtigt wird. Ohne diesen Parameter muss für die Eigenschaftenwerte von Objekten in einer Gruppe die Groß-Kleinschreibung nicht berücksichtigt werden.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Culture <string>
Gibt die Kultur an, die für Zeichenfolgenvergleiche verwendet werden soll.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-InputObject <psobject>
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 eine Auflistung von Objekten mithilfe des InputObject-Parameters an Group-Object senden, empfängt Group-Object ein Objekt, das die Auflistung darstellt. Daher erstellt Group-Object eine einzelne Gruppe mit diesem Objekt als Mitglied.
Um die Objekte in einer Auflistung zu gruppieren, übergeben Sie die Objekte über die Pipeline an Group-Object.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByValue) |
Platzhalterzeichen akzeptieren? |
false |
-NoElement
Lässt die Mitglieder einer Gruppe aus den Ergebnissen weg.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Eigenschaft <Object[]>
Gibt die Eigenschaften für die Gruppierung an. Die Objekte werden auf Grundlage des Werts der angegebenen Eigenschaft in Gruppen angeordnet.
Bei dem Wert des Property-Parameters kann es sich um eine neu berechnete Eigenschaft handeln. Zum Erstellen einer berechneten Eigenschaft erstellen Sie eine Hashtabelle mit dem Schlüssel "Expression", der einen Zeichenfolgen- oder Skriptblockwert angibt.
Erforderlich? |
false |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
<CommonParameters>
Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.
Eingaben und Ausgaben
Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.
Eingaben |
System.Management.Automation.PSObject Sie können jedes Objekt über die Pipeline an Group-Object übergeben. |
Ausgaben |
Microsoft.PowerShell.Commands.GroupInfo oder System.Collections.Hashtable Wenn Sie den AsHashTable-Parameter verwenden, gibt Group-Object eine Hashtabelle zurück. Andernfalls wird ein GroupInfo-Objekt zurückgegeben. |
Hinweise
Sie können Objekte auch mithilfe des GroupBy-Parameters der Formatierungs-Cmdlets (z. B. Format-Table [m2] und Format-List [m2]) gruppieren. Im Gegensatz zu Group-Object, das eine einzelne Tabelle mit einer Zeile für jeden Eigenschaftenwert erstellt, erstellen die GroupBy-Parameter eine Tabelle für jeden Eigenschaftenwert, mit einer Zeile für jedes Element, das über den Eigenschaftenwert verfügt.
Für Group-Object müssen die gruppierten Objekte nicht denselben Microsoft .NET Framework-Typ aufweisen. Wenn Objekte unterschiedlicher .NET Framework-Typen gruppiert werden, verwendet Group-Object die folgenden Regeln:
– Gleiche Eigenschaftennamen und Typen: Wenn die Objekte über eine Eigenschaft mit dem angegebenen Namen verfügen und die Eigenschaftenwerte den gleichen .NET Framework-Typ aufweisen, werden die Eigenschaftenwerte nach den gleichen Regeln wie Objekte des gleichen Typs gruppiert.
– Gleiche Eigenschaftennamen, unterschiedliche Typen: Wenn die Objekte über eine Eigenschaft mit dem angegebenen Namen verfügen, die Eigenschaftenwerte jedoch in verschiedenen Objekten unterschiedliche .NET Framework-Typen aufweisen, verwendet Group-Object den .NET Framework-Typ des ersten Vorkommens der Eigenschaft als .NET Framework-Typ für diese Eigenschaftengruppe. Wenn ein Objekt über eine Eigenschaft mit einem anderen Typ verfügt, wird der Eigenschaftenwert in den Typ für diese Gruppe konvertiert. Wenn die Typkonvertierung fehlschlägt, wird das Objekt nicht in die Gruppe eingeschlossen.
– Fehlende Eigenschaften: Objekte ohne eine angegebene Eigenschaft werden als nicht gruppierbar betrachtet. Nicht gruppierbare Objekte werden schließlich in der Ausgabe von GroupInfo-Objekten in der Gruppe "AutomationNull.Value" angegeben.
Beispiel 1
C:\PS>get-childitem *.doc | group-object -property length Beschreibung ----------- Mit diesem Befehl werden die Dateien mit der Erweiterung ".doc" am aktuellen Speicherort abgerufen und nach Größe gruppiert.
Beispiel 2
C:\PS>get-childitem | sort-object -property extension | group-object -property extension Beschreibung ----------- Mit diesem Befehl werden die Dateien am aktuellen Speicherort abgerufen, nach Dateinamenerweiterung sortiert und dann nach Dateinamenerweiterung gruppiert. Beachten Sie, dass die Dateien vor dem Gruppieren sortiert werden.
Beispiel 3
C:\PS>1..35 | group-object -property {$_ % 2},{$_ % 3} Beschreibung ----------- 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 35 nach dem Rest bei Division durch 2 oder 3 gruppiert angezeigt.
Beispiel 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} Beschreibung ----------- Mit diesen Befehlen werden die letzten 1000 Einträge aus dem Systemereignisprotokoll nach Ereignis-ID gruppiert angezeigt. Im ersten Befehl werden die Ereignisse mit dem Cmdlet "Get-EventLog" abgerufen und mit dem Zuweisungsoperator (=) in der Variablen "$events" gespeichert. Im zweiten Befehl werden die Ereignisse in der Variablen "$events" mit einem Pipelineoperator (|) an das Cmdlet "Group-Object" gesendet. Mit dem Property-Parameter wird angegeben, dass die Ereignisse nach dem Wert ihrer EventID-Eigenschaft gruppiert werden sollen. In der Ausgabe stellt die Spalte "Count" die Anzahl der Einträge in den einzelnen Gruppen, die Spalte "Name" die EventID-Werte, die jeweils eine Gruppe definieren, und die Spalte "Group" die Objekte in den einzelnen Gruppen dar.
Beispiel 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 Beschreibung ----------- In diesem Beispiel werden die Auswirkungen des NoElement-Parameters veranschaulicht. Mit diesen Befehlen werden die Prozesse auf dem Computer nach Prioritätsklasse gruppiert. Im ersten Befehl werden mit dem Cmdlet "Get-Process" die Prozesse auf dem Computer abgerufen. Die Ergebnisse werden mithilfe eines Pipelineoperators (|) an Group-Object gesendet, das die Objekte nach dem Wert der PriorityClass-Eigenschaft des Prozesses gruppiert. Der zweite Befehl stimmt mit dem ersten Befehl überein, mit dem Unterschied, dass er die Mitglieder der Gruppe mithilfe des NoElement-Parameters aus der Ausgabe entfernt. Das Ergebnis ist eine Tabelle, die nur die Anzahl und den Namen des Eigenschaftenwerts enthält. Die Ergebnisse werden in der folgenden Beispielausgabe gezeigt.
Beispiel 6
C:\PS>get-eventlog -logname system -newest 1000 | group-object -property {$_.TimeWritten - $_.TimeGenerated} Beschreibung ----------- Der Befehl veranschaulicht, wie der Wert des Property-Parameters als Skriptblock angegeben wird. Mit diesem Befehl werden die letzten 1000 Einträge aus dem Systemereignisprotokoll angezeigt, gruppiert nach der Zeitspanne zwischen dem Generieren und dem Schreiben der Einträge in das Protokoll. In diesem Befehl werden mit dem Cmdlet "Get-EventLog" die Ereignisprotokolleinträge abgerufen. Die Einträge werden mit einem Pipelineoperator (|) an das Cmdlet "Group-Object" gesendet. Der Wert des Property-Parameters wird als Skriptblock (ein Ausdruck in geschweiften Klammern) angegeben. Das Ergebnis der Auswertung des Skriptblocks ist die Zeitspanne zwischen dem Generieren des Protokolleintrags und dem Schreiben des Eintrags in das Protokoll. Nach diesem Wert werden die letzten 1000 Ereignisse gruppiert.
Beispiel 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 Beschreibung ----------- Mit diesem Befehl werden die Elemente im aktuellen Verzeichnis nach Dateinamenerweiterung gruppiert. Mithilfe des NoElement-Parameters werden die Mitglieder der Gruppe weggelassen. Die Ergebnisse werden in der folgenden Beispielausgabe gezeigt.
Beispiel 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 Beschreibung ----------- In diesem Beispiel wird gezeigt, wie die eindeutigen und nicht eindeutigen (mehrfach vorhandenen) Eigenschaftenwerte in einer Auflistung gesucht werden. Im ersten Befehl werden die eindeutigen Elemente eines Arrays abgerufen, indem das Array über die Pipeline an das Cmdlet "Get-Unique" übergeben wird. Im zweiten Befehl werden die nicht eindeutigen Elemente eines Arrays abgerufen. Das Array wird über die Pipeline an das Cmdlet "Group-Object" übergeben, das die Objekte nach Wert gruppiert. Die resultierenden Gruppen werden über die Pipeline an das Cmdlet "Where-Object" übergeben, das Objekte mit Gruppen auswählt, die mehrere Mitglieder enthalten. Im dritten Befehl wird eine praktische Verwendung dieses Verfahrens veranschaulicht. Mit demselben Verfahren werden Prozesse auf dem Computer gesucht, die den gleichen Prozessnamen aufweisen. Die Ergebnisse werden in der folgenden Beispielausgabe gezeigt.
Beispiel 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... ... Beschreibung ----------- In diesem Beispiel werden die Gruppen in einer Hashtabelle mithilfe des AsHashTable-Parameters und des AsString-Parameters als Auflistung von Schlüssel-Wert-Paaren zurückgegeben. In der resultierenden Hashtabelle ist jeder Eigenschaftenwert 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 Notation anzeigen. Im ersten Befehl werden die Get-Cmdlets und Set-Cmdlets in der Sitzung abgerufen und nach Verb gruppiert, die Gruppen werden als Hashtabelle zurückgegeben, und die Hashtabelle wird in der Variablen "$a" gespeichert. Im zweiten Befehl wird die Hashtabelle in $a angezeigt. Es gibt zwei Schlüssel-Wert-Paare – eines für die Get-Cmdlets und eines für die Set-Cmdlets. Im dritten Befehl werden die Werte des Get-Schlüssels in $a mithilfe der punktierten Notation angezeigt. Die Werte sind CmdletInfo-Objekte. Der AsString-Parameter konvertiert die Objekte in den Gruppen nicht in Zeichenfolgen.