Group-Object
Csoportosítja azokat az objektumokat, amelyek ugyanazt az értéket tartalmazzák a megadott tulajdonságokhoz.
Syntax
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
A Group-Object
parancsmag egy adott tulajdonság értéke alapján csoportokban jeleníti meg az objektumokat.
Group-Object
egy olyan táblát ad vissza, amely minden tulajdonságértékhez egy sort tartalmaz, és egy oszlopot, amely az adott értékkel rendelkező elemek számát jeleníti meg.
Ha egynél több tulajdonságot ad meg, Group-Object
először az első tulajdonság értékei szerint csoportosítja őket, majd minden tulajdonságcsoporton belül a következő tulajdonság értéke szerint csoportosítja őket.
A PowerShell 7-től kezdve a Group-Object
kombinálhatja a CaseSensitive és AsHashtable paramétereket a kis- és nagybetűk megkülönböztetésére. A kivonattáblakulcsok kis- és nagybetűket megkülönböztető összehasonlításokat használnak, és System.Collections.Hashtable objektumot ad ki.
Példák
1. példa: Fájlok csoportosítása bővítmény szerint
Ez a példa rekurzív módon lekéri a fájlokat $PSHOME
, és fájlnévkiterjesztés alapján csoportosítja őket. A rendszer elküldi a kimenetet a Sort-Object
parancsmagnak, amely az adott bővítményhez talált számfájlok alapján rendezi őket. Az üres Név könyvtárakat jelöl.
Ez a példa a NoElement paramétert használja a csoport tagjainak kihagyásához.
$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
...
2. példa: Egész számok csoportosítása szorzók és párosok szerint
Ez a példa bemutatja, hogyan használhat szkriptblokkokat a tulajdonság paraméter értékeként. Ez a parancs az 1 és 20 közötti egész számokat jeleníti meg, esélyek és párosak szerint csoportosítva.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
3. példa: Kivonatolók csoportosítása kulcsérték szerint
A PowerShell 6-tól kezdve a Group-Object
támogatja kivonatoló bemenetek kulcsértékek szerinti rendezését.
Az alábbi példa a kivonatolók tömbjét csoportosítja az egyes kivonatolók weight
kulcsának értéke alapján.
Ez a példa a NoElement paramétert használja a csoport tagjainak kihagyásához.
@(
@{ 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
4. példa: Eseménynapló-események csoportosítása EntryType szerint
Ez a példa a Rendszer eseménynaplójának 1000 legutóbbi bejegyzését jeleníti meg, EntryTypeszerint csoportosítva.
A kimenetben a Darabszám oszlop az egyes csoportok bejegyzéseinek számát jelöli. A Név oszlop a csoportot definiáló EventType értékeket jelöli. A Csoport oszlop az egyes csoportok objektumait jelöli.
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...}
5. példa: Folyamatok csoportosítása prioritási osztály szerint
Ez a példa az NoElement paraméter hatását mutatja be. Ezek a parancsok prioritási osztály szerint csoportosítják a számítógépen lévő folyamatokat.
Az első parancs a Get-Process
parancsmaggal szerzi be a folyamatokat a számítógépen, és elküldi az objektumokat a folyamatnak.
Group-Object
az objektumokat a folyamat PriorityClass tulajdonságának értéke alapján csoportosítja.
A második példa a NoElement paraméter használatával távolítja el a csoport tagjait a kimenetből. Az eredmény egy olyan tábla, amely csak a Darabszám és Név tulajdonságértékkel rendelkezik.
Az eredmények az alábbi mintakimenetben jelennek meg.
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
6. példa: Folyamatok csoportosítása név szerint
Az alábbi példa Group-Object
használ a helyi számítógépen futó folyamatok több példányának csoportosítására.
Where-Object
egynél több példányt tartalmazó folyamatokat jelenít meg.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
7. példa: Objektumok csoportosítása kivonattáblában
Ez a példa a AsHashTable és AsString paraméterekkel adja vissza a csoportokat egy kivonattáblában, kulcs-érték párok gyűjteményeként.
Az eredményként kapott kivonattáblában minden tulajdonságérték egy kulcs, a csoportelemek pedig az értékek. Mivel minden kulcs a kivonattábla objektumának tulajdonsága, pont jelöléssel megjelenítheti az értékeket.
Az első parancs lekéri a Get
és Set
parancsmagokat a munkamenetben, ige szerint csoportosítja őket, kivonattáblaként adja vissza a csoportokat, és menti a kivonattáblát a $A
változóban.
A második parancs megjeleníti a kivonattáblát a $A
. Két kulcs-érték pár van, egy a Get
parancsmagokhoz, egy pedig a Set
parancsmagokhoz.
A harmadik parancs pontjelezést használ, $A.Get
a Get key in $A
értékeinek megjelenítéséhez. Az értékek CmdletInfo objektum. A AsString paraméter nem konvertálja a csoportok objektumait sztringekké.
$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
...
8. példa: Kis- és nagybetűk megkülönböztetésével rendelkező kivonatoló tábla létrehozása
Ez a példa egyesíti a CaseSensitive és AsHashTable paramétereket egy kis- és nagybetűket megkülönböztető kivonatoló tábla létrehozásához. A példában szereplő fájlok .txt
és .TXT
kiterjesztéssel rendelkeznek.
$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}
A $hash
változó tárolja a System.Collections.Hashtable objektumot.
Get-ChildItem
lekéri a fájlneveket a C:\Files
könyvtárból, és elküldi a System.IO.FileInfo objektumokat a folyamatba.
Group-Object
Tulajdonság érték bővítményhasználatával csoportosítja az objektumokat. A CaseSensitive és AsHashTable paraméterek létrehozzák a kivonattáblát, és a kulcsok a kis- és nagybetűkre érzékeny kulcsok .txt
és .TXT
alapján vannak csoportosítva.
Paraméterek
-AsHashTable
Azt jelzi, hogy ez a parancsmag kivonattáblázatként adja vissza a csoportot. A kivonattábla kulcsai azok a tulajdonságértékek, amelyek alapján az objektumok csoportosítva vannak. A kivonattábla értékei azok az objektumok, amelyek rendelkeznek ezzel a tulajdonságértékel.
A AsHashTable paraméter önmagában minden olyan kivonattáblát ad vissza, amelyben minden kulcs a csoportosított objektum egy-egy példánya. Ha a AsString paraméterrel használja, a kivonattáblában szereplő kulcsok sztringek.
A PowerShell 7-től kezdve a kis- és nagybetűket megkülönböztető kivonattáblák létrehozásához a parancsban szerepeljen CaseSensitive és AsHashtable.
Típus: | SwitchParameter |
Aliasok: | AHT |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-AsString
Azt jelzi, hogy ez a parancsmag sztringekké alakítja a kivonattáblázat kulcsait. Alapértelmezés szerint a kivonattáblakulcsok a csoportosított objektum példányai. Ez a paraméter csak akkor érvényes, ha az AsHashTable paraméterrel használja.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-CaseSensitive
Azt jelzi, hogy ez a parancsmag megkülönbözteti a csoportosítási kis- és nagybetűket. Ezen paraméter nélkül a csoport objektumainak tulajdonságértékei eltérő eseteket tartalmazhatnak.
A PowerShell 7-től kezdve a kis- és nagybetűket megkülönböztető kivonattáblák létrehozásához a parancsban szerepeljen CaseSensitive és AsHashtable.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Culture
Meghatározza a sztringek összehasonlítása során használni kívánt kultúrát.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-InputObject
Megadja a csoportosítandó objektumokat. Adjon meg egy változót, amely tartalmazza az objektumokat, vagy írjon be egy parancsot vagy kifejezést, amely lekéri az objektumokat.
Ha a InputObject paraméterrel küldi el az objektumgyűjteményt Group-Object
, Group-Object
kap egy objektumot, amely a gyűjteményt jelöli. Ennek eredményeképpen egyetlen csoportot hoz létre az objektummal tagként.
Ha csoportosítani szeretné az objektumokat egy gyűjteményben, az objektumokat a Group-Object
.
Típus: | PSObject |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-NoElement
Azt jelzi, hogy ez a parancsmag kihagyja egy csoport tagjait az eredményekből.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Property
Megadja a csoportosítás tulajdonságait. Az objektumok nevesített csoportokba vannak rendezve a megadott tulajdonságok értéke alapján. Ha nincs megadva tulajdonság, az objektumok az értékük vagy az értékük ToString()
ábrázolása szerint vannak csoportosítva. A kimenet növekvő sorrendbe van rendezve a csoportnevek szerint.
A tulajdonság paraméter értéke új számított tulajdonság lehet. A számított tulajdonság lehet szkriptblokk vagy kivonattábla. Az érvényes kulcs-érték párok a következők:
- Kifejezés –
<string>
vagy<script block>
További információ: about_Calculated_Properties.
Típus: | Object[] |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
Bevitelek
A parancsmaghoz bármilyen objektumot csövezhet.
Kimenetek
Ez a parancsmag alapértelmezés szerint egy GroupInfo objektumot ad vissza.
Az AsHashTable paraméter használatakor ez a parancsmag egy kivonatoló objektumot ad vissza.
Jegyzetek
A PowerShell a következő aliasokat tartalmazza Group-Object
:
- Minden platform:
group
A formázási parancsmagok GroupBy paraméterével ( például Format-Table
és Format-List
) csoportosíthatja az objektumokat. Ellentétben Group-Object
, amely egyetlen táblát hoz létre minden tulajdonságértékhez egy sortal, a GroupBy paraméterek létrehoznak egy táblát minden tulajdonságértékhez egy sortal minden olyan elemhez, amely rendelkezik a tulajdonságértékkel.
Group-Object
nem követeli meg, hogy a csoportosított objektumok azonos Microsoft .NET-típusúak legyenek.
A különböző .NET-típusok objektumainak csoportosítása során Group-Object
a következő szabályokat használja:
Azonos tulajdonságnevek és -típusok.
Ha az objektumoknak van egy megadott nevű tulajdonsága, és a tulajdonságértékek .NET-típussal rendelkeznek, a tulajdonságértékek ugyanazok a szabályok szerint vannak csoportosítva, mint az azonos típusú objektumok esetében.
Azonos tulajdonságnevek, különböző típusok.
Ha az objektumoknak van egy megadott nevű tulajdonsága, de a tulajdonságértékek eltérő .NET-típussal rendelkeznek különböző objektumokban,
Group-Object
a tulajdonság első előfordulásának .NET-típusát használja .NET-típusként az adott tulajdonságcsoporthoz. Ha egy objektum egy másik típusú tulajdonsággal rendelkezik, a tulajdonság értéke az adott csoport típusává lesz konvertálva. Ha a típusátalakítás sikertelen, az objektum nem szerepel a csoportban.Hiányzó tulajdonságok.
A megadott tulajdonságot nem tartalmazó objektumok nem csoportosíthatók. A nem csoportosított objektumok az utolsó GroupInfo objektumkimenetben jelennek meg egy
AutomationNull.Value
nevű csoportban.
A kimenet növekvő sorrendbe van rendezve a csoportnevek szerint. Az egyes csoportokhoz tartozó elemek nincsenek rendezve. A lista a beérkezés sorrendjében szerepel.