Group-Object
Grupperar objekt som innehåller samma värde för angivna egenskaper.
Syntax
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
Cmdleten Group-Object visar objekt i grupper baserat på värdet för en angiven egenskap.
Group-Object returnerar en tabell med en rad för varje egenskapsvärde och en kolumn som visar antalet objekt med det värdet.
Om du anger mer än en egenskap Group-Object grupperar du dem först efter värdena för den första egenskapen och grupperar dem sedan efter värdet för nästa egenskap i varje egenskapsgrupp.
Från och med PowerShell 7 Group-Object kan du kombinera parametrarna CaseSensitive och AsHashtable för att skapa en skiftlägeskänslig hash-tabell. Hash-tabellnycklarna använder skiftlägeskänsliga jämförelser och matar ut ett System.Collections.Hashtable-objekt .
Exempel
Exempel 1: Gruppera filer efter tillägg
Det här exemplet hämtar rekursivt filerna under $PSHOME och grupperar dem efter filnamnstillägg. Utdata skickas till cmdleten Sort-Object , som sorterar dem efter antalet filer som hittades för det angivna tillägget. Det tomma namnet representerar kataloger.
I det här exemplet används parametern NoElement för att utelämna medlemmarna i gruppen.
$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
...
Exempel 2: Gruppera heltal efter odds och jämnar
Det här exemplet visar hur du använder skriptblock som värde för parametern Egenskap . Det här kommandot visar heltal från 1 till 20, grupperade efter odds och jämna.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Exempel 3: Gruppera händelselogghändelser efter EntryType
Det här exemplet visar de 1 000 senaste posterna i systemhändelseloggen, grupperade efter EntryType.
I utdata representerar kolumnen Antal antalet poster i varje grupp. Kolumnen Namn representerar de EventType-värden som definierar en grupp. Kolumnen Grupp representerar objekten i varje grupp.
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...}
Exempel 4: Gruppera processer efter prioritetsklass
Det här exemplet visar effekten av parametern NoElement . Dessa kommandon grupperar processerna på datorn efter prioritetsklass.
Det första kommandot använder cmdleten Get-Process för att hämta processerna på datorn och skickar objekten nedåt i pipelinen. Group-Objectgrupperar objekten efter värdet för egenskapen PriorityClass i processen.
I det andra exemplet används parametern NoElement för att eliminera medlemmarna i gruppen från utdata. Resultatet är en tabell med egenskapsvärdet Antal och Namn .
Resultaten visas i följande exempelutdata.
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
Exempel 5: Gruppera processer efter namn
I följande exempel används Group-Object för att gruppera flera instanser av processer som körs på den lokala datorn. Where-Object visar processer med fler än en instans.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Exempel 6: Gruppera objekt i en hash-tabell
I det här exemplet används parametrarna AsHashTable och AsString för att returnera grupperna i en hash-tabell som en samling nyckel/värde-par.
I den resulterande hash-tabellen är varje egenskapsvärde en nyckel och gruppelementen är värdena. Eftersom varje nyckel är en egenskap för hash-tabellobjektet kan du använda punktnotation för att visa värdena.
Det första kommandot hämtar Get cmdletarna och Set i sessionen, grupperar dem efter verb, returnerar grupperna som en hash-tabell och sparar hashtabellen i variabeln $A .
Det andra kommandot visar hash-tabellen i $A. Det finns två nyckel/värde-par, ett för Get cmdletarna och ett för Set cmdletarna.
Det tredje kommandot använder punktnotation $A.Get för att visa värdena för hämta-nyckeln i $A. Värdena är CmdletInfo-objekt . AsString-parametern konverterar inte objekten i grupperna till strängar.
$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
...
Exempel 7: Skapa en skiftlägeskänslig hash-tabell
Det här exemplet kombinerar parametrarna CaseSensitive och AsHashTable för att skapa en skiftlägeskänslig hash-tabell. Filerna i exemplet har tilläggen .txt och .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}
Variabeln $hash lagrar objektet System.Collections.Hashtable . Get-ChildItem hämtar filnamnen C:\Files från katalogen och skickar System.IO.FileInfo-objekten nedåt i pipelinen. Group-Objectgrupperar objekten med hjälp av egenskapsvärdetillägget. Parametrarna CaseSensitive och AsHashTable skapar hash-tabellen och nycklarna grupperas med skiftlägeskänsliga nycklar .txt och .TXT.
Parametrar
Anger att denna cmdlet returnerar gruppen som en hash-tabell. Nycklarna i hash-tabellen är de egenskapsvärden som objekten grupperas efter. Värdena i hash-tabellen är de objekt som har det egenskapsvärdet.
I sig returnerar AsHashTable-parametern varje hash-tabell där varje nyckel är en instans av det grupperade objektet. När de används med parametern AsString är nycklarna i hash-tabellen strängar.
Från och med PowerShell 7, för att skapa skiftlägeskänsliga hash-tabeller, inkluderar du CaseSensitive och AsHashtable i kommandot.
| Type: | SwitchParameter |
| Aliases: | AHT |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Anger att den här cmdleten konverterar hashtabellnycklarna till strängar. Som standard är hashtabellnycklarna instanser av det grupperade objektet. Den här parametern är endast giltig när den används med parametern AsHashTable .
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Anger att den här cmdleten gör gruppering skiftlägeskänslig. Utan den här parametern kan egenskapsvärdena för objekt i en grupp ha olika fall.
Från och med PowerShell 7, för att skapa skiftlägeskänsliga hash-tabeller, inkluderar du CaseSensitive och AsHashtable i kommandot.
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Anger vilken kultur som ska användas när strängar jämförs.
| Type: | String |
| Position: | Named |
| Default value: | None |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Anger vilka objekt som ska grupperas. Ange en variabel som innehåller objekten eller skriv ett kommando eller uttryck som hämtar objekten.
När du använder parametern InputObject för att skicka en samling objekt till Group-Objecttar Group-Object emot ett objekt som representerar samlingen. Därför skapas en enda grupp med objektet som medlem.
Gruppera objekten i en samling genom att skicka objekten till Group-Object.
| Type: | PSObject |
| Position: | Named |
| Default value: | None |
| Accept pipeline input: | True |
| Accept wildcard characters: | False |
Anger att denna cmdlet utelämnar medlemmarna i en grupp från resultaten.
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Anger egenskaperna för gruppering. Objekten ordnas i grupper baserat på värdet för den angivna egenskapen.
Värdet för parametern Egenskap kan vara en ny beräknad egenskap. Den beräknade egenskapen kan vara ett skriptblock eller en hash-tabell. Giltiga nyckel/värde-par är:
- Uttryck –
<string>eller<script block>
Mer information finns i about_Calculated_Properties.
| Type: | Object[] |
| Position: | 0 |
| Default value: | None |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
Indata
Du kan skicka valfritt objekt till Group-Object.
Utdata
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
När du använder parametern Group-ObjectAsHashTable returnerar ett Hashtable-objekt.
Annars returneras ett GroupInfo-objekt .
Kommentarer
Du kan använda parametern GroupBy för formaterings-cmdletar, till exempel Format-Table och Format-List, för att gruppera objekt. Till skillnad från Group-Object, som skapar en enskild tabell med en rad för varje egenskapsvärde, skapar GroupBy-parametrarna en tabell för varje egenskapsvärde med en rad för varje objekt som har egenskapsvärdet.
Group-Object kräver inte att objekten som grupperas är av samma Microsoft .NET Core-typ. När du grupperar objekt av olika .NET Core-typer Group-Object använder du följande regler:
Samma egenskapsnamn och typer.
Om objekten har en egenskap med det angivna namnet och egenskapsvärdena har samma .NET Core-typ grupperas egenskapsvärdena med samma regler som används för objekt av samma typ.
Samma egenskapsnamn, olika typer.
Om objekten har en egenskap med det angivna namnet, men egenskapsvärdena har en annan .NET Core-typ i olika objekt,
Group-Objectanvänder .NET Core-typen för den första förekomsten av egenskapen som .NET Core-typ för den egenskapsgruppen. När ett objekt har en egenskap med en annan typ konverteras egenskapsvärdet till typen för gruppen. Om typkonverteringen misslyckas ingår inte objektet i gruppen.Egenskaper saknas.
Objekt som inte har en angiven egenskap kan inte grupperas. Objekt som inte är grupperade visas i det slutliga GroupInfo-objektets utdata i en grupp med namnet
AutomationNull.Value.
Relaterade länkar
Feedback
Skicka och visa feedback för