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
De Group-Object
cmdlet geeft objecten weer in groepen op basis van de waarde van een opgegeven eigenschap.
Group-Object
retourneert een tabel met één rij voor elke eigenschapswaarde en een kolom die het aantal items met die waarde weergeeft.
Als u meer dan één eigenschap opgeeft, Group-Object
groepeert u deze eerst op de waarden van de eerste eigenschap en vervolgens groepeert deze binnen elke eigenschapsgroep 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 weergegeven $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 even
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 en met 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: Hashtables groeperen op sleutelwaarde
Vanaf PowerShell 6 ondersteunt Group-Object
het sorteren van hashtabelinvoer op sleutelwaarden.
In het volgende voorbeeld wordt een matrix met hashtabellen gegroepeerd op basis van de waarde van de sleutel van elke hashtabel weight
.
In dit voorbeeld wordt de parameter NoElement gebruikt om de leden van de groep weg te laten.
@(
@{ 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
Voorbeeld 4: 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 Aantal 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.Diag...}
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
Voorbeeld 5: 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.
De eerste opdracht gebruikt de Get-Process
cmdlet om de processen op de computer op te halen en de objecten naar de pijplijn te verzenden. Group-Object
groepeer de objecten op 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 6: Groepsprocessen op naam
In het volgende voorbeeld worden Group-Object
meerdere exemplaren van processen gegroepeerd die op de lokale computer worden uitgevoerd. 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 7: 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 is van het hash-tabelobject, kunt u punt notatie gebruiken om de waarden weer te geven.
De eerste opdracht haalt de Get
en Set
cmdlets op in de sessie, 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 punt notatie om $A.Get
de waarden van de Get-sleutel weer te geven in $A
. De waarden zijn CmdletInfo-object . Met de parameter AsString worden de objecten in de groepen niet geconverteerd 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 8: Een hoofdlettergevoelige hash-tabel maken
In dit voorbeeld worden de parameters CaseSensitive en AsHashTable gecombineerd om een hoofdlettergevoelige hash-tabel 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-Object
groepeer de objecten met behulp van de eigenschapswaardeextensie. 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. Wanneer de parameter AsString wordt gebruikt, zijn de sleutels in de hash-tabel tekenreeksen.
Vanaf PowerShell 7 kunt u hoofdlettergevoelige hashtabellen maken door CaseSensitive en AsHashtable in uw opdracht op te nemen.
Type: | SwitchParameter |
Aliases: | AHT |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-AsString
Geeft aan dat met deze cmdlet de hash-tabelsleutels worden geconverteerd naar tekenreeksen. Standaard zijn de hashtabelsleutels 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 |
Required: | 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 door CaseSensitive en AsHashtable in uw opdracht op te nemen.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Hiermee geeft u de cultuur die moet worden gebruikt bij het vergelijken van tekenreeksen.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
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-Object
verzenden, Group-Object
ontvangt u één object dat de verzameling vertegenwoordigt. Als gevolg hiervan wordt één groep met dat object als lid gemaakt.
Als u de objecten in een verzameling wilt groeperen, sluist u de objecten door naar Group-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Hiermee geeft u de eigenschappen voor groeperen. De objecten worden gerangschikt in benoemde groepen op basis van de waarde van de opgegeven eigenschappen. Wanneer er geen eigenschap is opgegeven, worden objecten gegroepeerd op hun waarde of de weergave van hun ToString()
waarde. De uitvoer wordt in oplopende volgorde gesorteerd op de groepsnamen.
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 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
U kunt elk object doorsluisen naar deze cmdlet.
Uitvoerwaarden
Deze cmdlet retourneert standaard een GroupInfo-object .
Wanneer u de parameter AsHashTable gebruikt, retourneert deze cmdlet een Hashtable-object .
Notities
PowerShell bevat de volgende aliassen voor Group-Object
:
- Alle platforms:
group
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
, waardoor één tabel met een rij voor elke eigenschapswaarde wordt gemaakt, 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-type zijn.
Bij het groeperen van objecten van verschillende .NET-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-type hebben, worden de eigenschapswaarden gegroepeerd op 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-type hebben in verschillende objecten,
Group-Object
gebruikt u het .NET-type van het eerste exemplaar van de eigenschap als het .NET-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
.
De uitvoer wordt in oplopende volgorde gesorteerd op de groepsnamen. De items die bij elke groep horen, worden niet gesorteerd. Ze worden vermeld in de volgorde waarin ze zijn ontvangen.
Verwante koppelingen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor