Group-Object

Hiermee worden objecten gegroepeerd die dezelfde waarde voor de opgegeven eigenschappen bevatten.

Syntax

Group-Object
     [-NoElement]
     [-AsHashTable]
     [-AsString]
     [-InputObject <PSObject>]
     [[-Property] <Object[]>]
     [-Culture <String>]
     [-CaseSensitive]
     [<CommonParameters>]

Description

Met Group-Object de cmdlet worden objecten in groepen weergegeven op basis van de waarde van een opgegeven eigenschap. Group-Object retourneert een tabel met één rij voor elke eigenschapswaarde en een kolom waarin het aantal items met die waarde wordt weergegeven.

Als u meer dan één eigenschap opgeeft, groepeert u Group-Object deze eerst op de waarden van de eerste eigenschap en vervolgens, binnen elke eigenschapsgroep, wordt deze gegroepeerd op de waarde van de volgende eigenschap.

Vanaf PowerShell 7 Group-Object kunt u de parameters CaseSensitive en AsHashtable combineren om een hoofdlettergevoelige hash-tabel te maken. De hashtabelsleutels maken gebruik van hoofdlettergevoelige vergelijkingen en voeren een System.Collections.Hashtable-object uit.

Voorbeelden

Voorbeeld 1: Bestanden groeperen op extensie

In dit voorbeeld worden de bestanden recursief opgeslagen $PSHOME en gegroepeerd op bestandsnaamextensie. De uitvoer wordt verzonden naar de Sort-Object cmdlet, waarmee ze worden gesorteerd op de aantal bestanden die zijn gevonden voor de opgegeven extensie. De lege naam vertegenwoordigt mappen.

In dit voorbeeld wordt de parameter NoElement gebruikt om de leden van de groep weg te laten.

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

Voorbeeld 2: Gehele getallen groeperen op oneven en evenn

In dit voorbeeld ziet u hoe u scriptblokken gebruikt als de waarde van de parameter Eigenschap . Met deze opdracht worden de gehele getallen van 1 tot 20 weergegeven, gegroepeerd op kansen en zelfs.

1..20 | Group-Object -Property {$_ % 2}

Count Name                      Group
----- ----                      -----
   10 0                         {2, 4, 6, 8...}
   10 1                         {1, 3, 5, 7...}

Voorbeeld 3: Gebeurtenislogboeken groeperen op EntryType

In dit voorbeeld worden de 1000 meest recente vermeldingen weergegeven in het gebeurtenislogboek van het systeem, gegroepeerd op EntryType.

In de uitvoer vertegenwoordigt de kolom Count het aantal vermeldingen in elke groep. De kolom Naam vertegenwoordigt de EventType-waarden waarmee een groep wordt gedefinieerd. De kolom Groep vertegenwoordigt de objecten in elke groep.

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

Voorbeeld 4: Processen groeperen op prioriteitsklasse

In dit voorbeeld ziet u het effect van de parameter NoElement . Met deze opdrachten worden de processen op de computer gegroepeerd op prioriteitsklasse.

Met de eerste opdracht wordt de Get-Process cmdlet gebruikt om de processen op de computer op te halen en de objecten in de pijplijn te verzenden. Group-Objectgroepeer de objecten op basis van de waarde van de eigenschap PriorityClass van het proces.

In het tweede voorbeeld wordt de parameter NoElement gebruikt om de leden van de groep uit de uitvoer te verwijderen. Het resultaat is een tabel met alleen de eigenschap Count en Name .

De resultaten worden weergegeven in de volgende voorbeelduitvoer.

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

Voorbeeld 5: Groepsprocessen op naam

In het volgende voorbeeld wordt gebruikgemaakt Group-Object van het groeperen van meerdere exemplaren van processen die worden uitgevoerd op de lokale computer. Where-Object geeft processen weer met meer dan één exemplaar.

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

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

Voorbeeld 6: Objecten groeperen in een hash-tabel

In dit voorbeeld worden de parameters AsHashTable en AsString gebruikt om de groepen in een hash-tabel te retourneren als een verzameling sleutel-waardeparen.

In de resulterende hashtabel is elke eigenschapswaarde een sleutel en zijn de groepselementen de waarden. Omdat elke sleutel een eigenschap van het hash-tabelobject is, kunt u puntnotatie gebruiken om de waarden weer te geven.

De eerste opdracht haalt de Get en Set cmdlets in de sessie op, groepeert ze op werkwoord, retourneert de groepen als een hash-tabel en slaat de hash-tabel op in de $A variabele.

Met de tweede opdracht wordt de hash-tabel weergegeven in $A. Er zijn twee sleutel-waardeparen, één voor de Get cmdlets en één voor de Set cmdlets.

De derde opdracht maakt gebruik van puntnotatie om $A.Get de waarden van de Get-sleutel weer te geven in $A. De waarden zijn CmdletInfo-object . De AsString-parameter converteert de objecten in de groepen niet naar tekenreeksen.

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

Voorbeeld 7: Een hoofdlettergevoelige hashtabel maken

In dit voorbeeld worden de parameters CaseSensitive en AsHashTable gecombineerd om een hoofdlettergevoelige hashtabel te maken. De bestanden in het voorbeeld hebben extensies van .txt en .TXT.

$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}

De $hash variabele slaat het object System.Collections.Hashtable op . Get-ChildItem haalt de bestandsnamen op uit de C:\Files map en verzendt de System.IO.FileInfo-objecten in de pijplijn. Group-Objectgroepeer de objecten met behulp van de eigenschapswaarde-extensie. De parameters CaseSensitive en AsHashTable maken de hash-tabel en de sleutels worden gegroepeerd met behulp van de hoofdlettergevoelige sleutels .txt en .TXT.

Parameters

-AsHashTable

Geeft aan dat deze cmdlet de groep retourneert als een hash-tabel. De sleutels van de hash-tabel zijn de eigenschapswaarden waarmee de objecten worden gegroepeerd. De waarden van de hash-tabel zijn de objecten met die eigenschapswaarde.

De parameter AsHashTable retourneert op zichzelf elke hashtabel waarin elke sleutel een exemplaar van het gegroepeerde object is. Bij gebruik met de AsString-parameter zijn de sleutels in de hash-tabel tekenreeksen.

Vanaf PowerShell 7 kunt u hoofdlettergevoelige hashtabellen maken met CaseSensitive en AsHashtable in uw opdracht.

Type:SwitchParameter
Aliases:AHT
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-AsString

Geeft aan dat met deze cmdlet de hash-tabelsleutels worden geconverteerd naar tekenreeksen. De hashtabelsleutels zijn standaard exemplaren van het gegroepeerde object. Deze parameter is alleen geldig wanneer deze wordt gebruikt met de parameter AsHashTable .

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-CaseSensitive

Geeft aan dat deze cmdlet de groepering hoofdlettergevoelig maakt. Zonder deze parameter kunnen de eigenschapswaarden van objecten in een groep verschillende gevallen hebben.

Vanaf PowerShell 7 kunt u hoofdlettergevoelige hashtabellen maken met CaseSensitive en AsHashtable in uw opdracht.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-Culture

Hiermee geeft u de cultuur op die moet worden gebruikt bij het vergelijken van tekenreeksen.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-InputObject

Hiermee geeft u de objecten die moeten worden gegroepeerd. Voer een variabele in die de objecten bevat of typ een opdracht of expressie waarmee de objecten worden opgehaald.

Wanneer u de parameter InputObject gebruikt om een verzameling objecten naar te Group-Objectverzenden, Group-Object ontvangt u één object dat de verzameling vertegenwoordigt. Als gevolg hiervan wordt één groep gemaakt met dat object als lid.

Als u de objecten in een verzameling wilt groeperen, sluist u de objecten door naar Group-Object.

Type:PSObject
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False
-NoElement

Geeft aan dat deze cmdlet de leden van een groep weglaat uit de resultaten.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-Property

Hiermee geeft u de eigenschappen voor groeperen. De objecten worden gerangschikt in groepen op basis van de waarde van de opgegeven eigenschap.

De waarde van de parameter Eigenschap kan een nieuwe berekende eigenschap zijn. De berekende eigenschap kan een scriptblok of een hash-tabel zijn. Geldige sleutel-waardeparen zijn:

  • Expressie - <string> of <script block>

Zie about_Calculated_Properties voor meer informatie.

Type:Object[]
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

PSObject

U kunt elk object doorsluisen naar Group-Object.

Uitvoerwaarden

Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable

Wanneer u de parameter AsHashTable gebruikt, Group-Object retourneert u een Hashtable-object . Anders wordt een GroupInfo-object geretourneerd.

Notities

U kunt de GroupBy-parameter van de opmaak-cmdlets, zoals Format-Table en Format-List, gebruiken om objecten te groeperen. In tegenstelling tot Group-Object, waarmee één tabel wordt gemaakt met een rij voor elke eigenschapswaarde, maken de GroupBy-parameters een tabel voor elke eigenschapswaarde met een rij voor elk item met de eigenschapswaarde.

Group-Object vereist niet dat de objecten die worden gegroepeerd, van hetzelfde Microsoft .NET Core-type zijn. Bij het groeperen van objecten van verschillende .NET Core-typen gebruikt Group-Object u de volgende regels:

  • Dezelfde eigenschapsnamen en -typen.

    Als de objecten een eigenschap met de opgegeven naam hebben en de eigenschapswaarden hetzelfde .NET Core-type hebben, worden de eigenschapswaarden gegroepeerd met dezelfde regels die worden gebruikt voor objecten van hetzelfde type.

  • Dezelfde eigenschapsnamen, verschillende typen.

    Als de objecten een eigenschap met de opgegeven naam hebben, maar de eigenschapswaarden een ander .NET Core-type hebben in verschillende objecten, gebruikt u Group-Object het .NET Core-type van het eerste exemplaar van de eigenschap als het .NET Core-type voor die eigenschapsgroep. Wanneer een object een eigenschap met een ander type heeft, wordt de eigenschapswaarde geconverteerd naar het type voor die groep. Als de typeconversie mislukt, wordt het object niet opgenomen in de groep.

  • Ontbrekende eigenschappen.

    Objecten die geen opgegeven eigenschap hebben, kunnen niet worden gegroepeerd. Objecten die niet zijn gegroepeerd, worden weergegeven in de uiteindelijke GroupInfo-objectuitvoer in een groep met de naam AutomationNull.Value.