Group-Object
Hiermee worden objecten gegroepeerd die dezelfde waarde voor de opgegeven eigenschappen bevatten.
Syntaxis
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-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
ze eerst groepeert op de waarden van de eerste eigenschap en vervolgens binnen elke eigenschapsgroep groepeert deze op de waarde van de volgende eigenschap.
Voorbeelden
Voorbeeld 1: Bestanden groeperen op extensie
In dit voorbeeld worden de bestanden recursief onder $PSHOME
en gegroepeerd op bestandsnaamextensie. De uitvoer wordt verzonden naar de Sort-Object
cmdlet die ze sorteert op de aantal bestanden 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 1 {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}
10 0 {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Voorbeeld 3: Gebeurtenislogboeken groeperen op EntryType
Met deze opdrachten worden de 1000 meest recente vermeldingen in het gebeurtenislogboek van het systeem weergegeven, gegroepeerd op EntryType.
In de uitvoer vertegenwoordigt de kolom Count het aantal vermeldingen in elke groep, de kolom Name de EventType waarden die een groep definiëren en de kolom Groep de objecten in elke groep vertegenwoordigt.
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.
De eerste opdracht maakt gebruik van de Get-Process
cmdlet om de processen op de computer op te halen.
Er wordt een pijplijnoperator gebruikt |
om de resultaten te verzenden naar Group-Object
, waarmee de objecten worden gegroepeerd op de waarde van de eigenschap PriorityClass van het proces.
De tweede opdracht is identiek aan de eerste, behalve dat de parameter NoElement wordt gebruikt om de leden van de groep uit de uitvoer te elimineren. Het resultaat is een tabel met alleen de naam van het aantal en de eigenschapswaarde.
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 Group-Object
gebruikt voor meerdere exemplaren van processen die op de lokale computer worden uitgevoerd.
Get-Process | Group-Object -Property Name -NoElement | Where {$_.count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Voorbeeld 8: 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, dat wil gezegd, 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 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 in $A
weergegeven.
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 de waarden van de sleutel Ophalen in $A
weer te geven.
De waarden zijn CmdletInfo object.
De parameter AsString 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-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...
...
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 parameter AsString zijn de sleutels in de hash-tabel tekenreeksen.
Type: | SwitchParameter |
Aliassen: | AHT |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Culture
Hiermee geeft u de cultuur die moet worden gebruikt bij het vergelijken van tekenreeksen.
Type: | String |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 Group-Object
te verzenden, ontvangt Group-Object
éé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 |
Vereist: | False |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-NoElement
Geeft aan dat deze cmdlet de leden van een groep weglaat uit de resultaten.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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. Als u een berekende eigenschap wilt maken, maakt u een hash-tabel met een Expressie sleutel waarmee een tekenreeks- of scriptblokwaarde wordt opgegeven.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt elk object doorslangen naar Group-Object
.
Uitvoerwaarden
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
Wanneer u de parameter AsHashTable gebruikt, retourneert Group-Object
een hash-tabel.
Anders wordt een GroupInfo--object geretourneerd.
Notities
U kunt ook de parameter GroupBy van de opmaak-cmdlets (zoals
Format-Table
enFormat-List
) gebruiken om objecten te groeperen. In tegenstelling totGroup-Object
, waarmee één tabel met een rij voor elke eigenschapswaarde wordt gemaakt, maken de parameters GroupBy 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 Framework-type zijn. Bij het groeperen van objecten van verschillende .NET Framework-typen gebruiktGroup-Object
de volgende regels:Dezelfde eigenschapsnamen en -typen. Als de objecten een eigenschap met de opgegeven naam hebben en de eigenschapswaarden hetzelfde .NET Framework-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 Framework-type hebben in verschillende objecten, gebruikt
Group-Object
het .NET Framework-type van het eerste exemplaar van de eigenschap als het .NET Framework-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, worden als niet-groeperingsbaar beschouwd. Niet-gegroepeerde objecten worden weergegeven in de uiteindelijke GroupInfo objectuitvoer in een groep met de naam
AutomationNull.Value
.