Group-Object

Azokat az objektumokat csoportosítja, amelyek a megadott tulajdonságoknál ugyanazt az értéket tartalmazzák.

Syntax

Group-Object
     [-NoElement]
     [-AsHashTable]
     [-AsString]
     [-InputObject <PSObject>]
     [[-Property] <Object[]>]
     [-Culture <String>]
     [-CaseSensitive]
     [<CommonParameters>]

Description

A Group-Object parancsmag csoportokban jeleníti meg az objektumokat egy adott tulajdonság értéke alapján. Group-Object Egy olyan táblát ad vissza, amely minden tulajdonságértékhez egy sort és egy oszlopot ad vissza, 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 az egyes tulajdonságcsoportokon 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 megkülönböztetik a kis- és nagybetűket, és egy 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é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 hagyja ki 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, szorzók és páros 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: Eseménynapló-események csoportosítása EntryType szerint

Ez a példa az 1000 legutóbbi bejegyzést jeleníti meg a rendszer eseménynaplójában, EntryType szerint csoportosítva.

A kimenetben a Darab 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.Diagnostics...}
  722 Information   {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics...}
  125 Warning       {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics...}

4. 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 folyamatnak. Group-ObjectA a folyamat PriorityClass tulajdonságának értéke alapján csoportosítja az objektumokat.

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 Darab é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

5. 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 több példánnyal rendelkező 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

6. példa: Objektumok csoportosítása kivonattáblában

Ez a példa az AsHashTable és az 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 tulajdonsága, pont jelöléssel jelenítheti meg az értékeket.

Az első parancs lekéri a Get munkamenetben lévő parancsmagokat és Set parancsmagokat, ige szerint csoportosítja őket, kivonattáblázatként adja vissza a csoportokat, és menti a kivonattáblát a $A változóban.

A második parancs a kivonattáblát jeleníti meg 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 pontkijelezést használ a $A.GetBeolvasá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
...

7. példa: Kis- és nagybetűk megkülönböztetése kivonattáblázat létrehozása

Ez a példa a CaseSensitive és az AsHashTable paramétereket kombinálva létrehoz egy kis- és nagybetűket megkülönböztető kivonattáblát. A példában szereplő fájlok kiterjesztése és .TXT..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 A a Tulajdonság érték bővítmény használatával csoportosítja az objektumokat. A CaseSensitive és az AsHashTable paraméterek létrehozzák a kivonattáblát, és a kulcsok a kis- és nagybetűk megkülönböztetésével .txt vannak csoportosítva..TXT

Paraméterek

-AsHashTable

Azt jelzi, hogy ez a parancsmag kivonattáblaké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 tulajdonságértékével rendelkeznek.

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 együtt használva 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 a parancsba.

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

-AsString

Azt jelzi, hogy ez a parancsmag sztringekké alakítja a kivonattábla 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.

Type:SwitchParameter
Position:Named
Default value: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. A 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 a parancsba.

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

-Culture

Meghatározza a sztringek összehasonlítása során használandó kulturális környezetet.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Meghatározza 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 az InputObject paraméterrel küldi el az objektumok Group-Objectgyűjteményét, Group-Object egy objektumot kap, amely a gyűjteményt jelöli. Ennek eredményeképpen egyetlen csoportot hoz létre, amelynek tagja az objektum.

A gyűjteményben lévő objektumok csoportosításához az objektumokat a következőre kell átirányítani Group-Object: .

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

-Property

Megadja a csoportosítás tulajdonságait. Az objektumok csoportokba vannak rendezve a megadott tulajdonság értéke alapján.

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
Accept pipeline input:False
Accept wildcard characters:False

Bevitelek

PSObject

Bármilyen objektumot átirányíthat a parancsra Group-Object.

Kimenetek

Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable

Az AsHashTable paraméter Group-Object használatakor egy kivonatoló objektumot ad vissza. Ellenkező esetben egy GroupInfo objektumot ad vissza.

Jegyzetek

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ó egyetlen 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 A nem követeli meg, hogy a csoportosított objektumok azonos Microsoft .NET Core típusúak legyenek. A különböző .NET Core-típusok Group-Object objektumainak csoportosításához 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 ugyanazzal a .NET Core-típussal rendelkeznek, a tulajdonságértékek az azonos típusú objektumokhoz használt szabályok szerint vannak csoportosítva.

  • 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 Core-típussal rendelkeznek különböző objektumokban, Group-Object a tulajdonság első előfordulásának .NET Core-típusát használja a tulajdonságcsoport .NET Core-típusaként. Ha egy objektum egy másik típusú tulajdonsággal rendelkezik, a tulajdonság értéke az adott csoport típusára lesz konvertálva. Ha a típuskonvertálá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.