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 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 Group-Object
kezdve a CaseSensitive és az AsHashtable paraméterek kombinálásával létrehozhat egy kis- és nagybetűket megkülönböztető kivonattáblát. A kivonattáblakulcsok kis- és nagybetűket megkülönböztető összehasonlításokat használnak, és egy System.Collections.Hashtable objektumot adnak 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éssel 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éter használatával kihagyja a csoport tagjait.
$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 Group-Object
kezdve támogatja a 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ókulcsok weight
értéke alapján.
Ez a példa a NoElement paraméter használatával kihagyja a csoport tagjait.
@(
@{ 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 EntryType szerint csoportosítva.
A kimenetben a Darabszám oszlop az egyes csoportok bejegyzéseinek számát jelöli. A Név oszlop a csoportot meghatározó 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 a 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
parancsmag használatával lekéri a folyamatokat a számítógépen, és elküldi az objektumokat a folyamaton. 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 tábla, amely csak a Darabszám és a Név tulajdonság értékét tartalmazza.
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 a helyi számítógépen futó folyamatok több példányának csoportosítására használható Group-Object
. 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 az AsHashTable és az AsString paraméterek használatával 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
munkamenetben lévő parancsmagokat, Set
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 következőben $A
: . Két kulcs-érték pár van, egy a Get
parancsmagokhoz és egy a Set
parancsmagokhoz.
A harmadik parancs pontjelezést használ a $A.Get
Beolvasás kulcs értékeinek megjelenítéséhez.$A
Az értékek a CmdletInfo objektum. Az 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 az 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 a következő kiterjesztéssel .txt
rendelkeznek: és .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}
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 folyamatnak. Group-Object
az objektumokat a Tulajdonság érték bővítmény használatával csoportosítja. A CaseSensitive és az AsHashTable paraméterek létrehozzák a kivonattáblát, és a kulcsok a kis- és .TXT
nagybetűk megkülönböztetésével .txt
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.
Az AsHashTable paraméter önmagában minden olyan kivonattáblát visszaad, amelyben minden kulcs a csoportosított objektum példánya. Az AsString paraméterrel való használat esetén a kivonattáblában lévő kulcsok sztringek.
A PowerShell 7-től kezdve a kis- és nagybetűket megkülönböztető kivonattáblák létrehozásához vegye fel a CaseSensitive és az AsHashtable parancsot .
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 az AsHashTable paraméterrel való használat esetén érvényes.
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 vegye fel a CaseSensitive és az AsHashtable parancsot .
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.
Amikor az InputObject paraméterrel küldi el az objektumgyűjteményt Group-Object
, Group-Object
egy objektumot kap, 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 következőre kell csöveznie 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 ToString()
értékük ábrázolása szerint vannak csoportosítva. A kimenet növekvő sorrendbe van rendezve a csoportnevek szerint.
A Tulajdonság paraméter értéke lehet egy új számított tulajdonság. 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 hashtable objektumot ad vissza.
Jegyzetek
A PowerShell a következő aliasokat Group-Object
tartalmazza:
- Minden platform:
group
Az objektumok csoportosításához használhatja a formázási parancsmagok GroupBy paraméterét, például Format-Table
és Format-List
. Az egyes tulajdonságértékekhez tartozó sorokat tartalmazó táblával ellentétben Group-Object
a GroupBy-paraméterek minden tulajdonságértékhez létrehoznak egy táblát, amely minden olyan elemhez tartalmaz egy sort, amely rendelkezik a tulajdonságértékkel.
Group-Object
nem követeli meg, hogy a csoportosított objektumok a Microsoft .NET-típussal azonosak legyenek.
A különböző .NET-típusok Group-Object
objektumainak csoportosításakor a következő szabályokat kell használnia:
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 objektumok rendelkeznek a megadott névvel rendelkező tulajdonsággal, 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 a tulajdonságcsoport .NET-típusaként. 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 nevű
AutomationNull.Value
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.