Freigeben über


Group-Object

Gruppiert Objekte, die für die angegebenen Eigenschaften denselben Wert enthalten.

Syntax

Group-Object [-AsHashTable] [-AsString] [[-Property] <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-Objekt

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-Objekte

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

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