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-Objectaz 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 .TXTnagybetű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 .

Type:SwitchParameter
Aliases:AHT
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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 .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Culture

Meghatározza a sztringek összehasonlítása során használni kívánt kultúrát.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-NoElement

Azt jelzi, hogy ez a parancsmag kihagyja egy csoport tagjait az eredményekből.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:Object[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Bevitelek

PSObject

A parancsmaghoz bármilyen objektumot csövezhet.

Kimenetek

GroupInfo

Ez a parancsmag alapértelmezés szerint egy GroupInfo objektumot ad vissza.

Hashtable

Az AsHashTable paraméter használatakor ez a parancsmag egy hashtable objektumot ad vissza.

Jegyzetek

A PowerShell a következő aliasokat Group-Objecttartalmazza:

  • 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-Objecta 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.Valuecsoportban.

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.