Megosztás a következőn keresztül:


Group-Object

Csoportosítja azokat az objektumokat, amelyek ugyanazt az értéket tartalmazzák a megadott tulajdonságokhoz.

Syntax

HashTable

Group-Object
    [[-Property] <Object[]>]
    [-NoElement]
    [-AsHashTable]
    [-AsString]
    [-InputObject <PSObject>]
    [-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 alatt, é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: 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.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 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-Objectaz objektumokat a folyamat PriorityClass tulajdonságának értéke alapján csoportosítja.

A második példa a NoElement paraméterrel 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

5. 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

6. 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
...

7. példa: Kis- és nagybetűket megkülönböztető kivonattá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 .TXTkiterjeszté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 .TXTalapjá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.

Paramétertulajdonságok

Típus:SwitchParameter
Alapértelmezett érték:False
Támogatja a helyettesítő karaktereket:False
DontShow:False
Aliasok:AHT

Paraméterkészletek

(All)
Position:Named
Kötelező:False
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték: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.

Paramétertulajdonságok

Típus:SwitchParameter
Alapértelmezett érték:False
Támogatja a helyettesítő karaktereket:False
DontShow:False

Paraméterkészletek

(All)
Position:Named
Kötelező:False
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték: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.

Paramétertulajdonságok

Típus:SwitchParameter
Alapértelmezett érték:False
Támogatja a helyettesítő karaktereket:False
DontShow:False

Paraméterkészletek

(All)
Position:Named
Kötelező:False
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték:False

-Culture

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

Paramétertulajdonságok

Típus:String
Alapértelmezett érték:None
Támogatja a helyettesítő karaktereket:False
DontShow:False

Paraméterkészletek

(All)
Position:Named
Kötelező:False
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték: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.

Paramétertulajdonságok

Típus:PSObject
Alapértelmezett érték:None
Támogatja a helyettesítő karaktereket:False
DontShow:False

Paraméterkészletek

(All)
Position:Named
Kötelező:False
Folyamatból származó érték:True
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték:False

-NoElement

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

Paramétertulajdonságok

Típus:SwitchParameter
Alapértelmezett érték:False
Támogatja a helyettesítő karaktereket:False
DontShow:False

Paraméterkészletek

(All)
Position:Named
Kötelező:False
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték: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 ú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ókért lásd a about_Calculated_Propertiesrészt.

Paramétertulajdonságok

Típus:

Object[]

Alapértelmezett érték:None
Támogatja a helyettesítő karaktereket:False
DontShow:False

Paraméterkészletek

(All)
Position:0
Kötelező:False
Folyamatból származó érték:False
Folyamatból származó érték tulajdonságnév alapján:False
Fennmaradó argumentumokból származó érték:False

CommonParameters

Ez a parancsmag a következő gyakori paramétereket támogatja: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction és -WarningVariable. További információért lásd about_CommonParameters.

Bevitelek

PSObject

Bármilyen objektumot becsúszthat Group-Object.

Kimenetek

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

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

Jegyzetek

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 szükséges, hogy a csoportosított objektumok azonos Microsoft .NET Core típusúak legyenek. Különböző .NET Core-típusú Group-Object objektumok csoportosítása esetén a következő szabályokat használja:

  • Azonos tulajdonságnevek és -típusok.

    Ha az objektumok a megadott nevű tulajdonsággal rendelkeznek, és a tulajdonságértékek azonos .NET Core-típussal rendelkeznek, a tulajdonságértékek ugyanazokkal a szabályokkal vannak csoportosítva, mint az azonos típusú objektumokhoz.

  • Azonos tulajdonságnevek, különböző típusok.

    Ha az objektumok rendelkeznek a megadott nevű tulajdonsággal, de a tulajdonságértékek különböző .NET Core-típussal rendelkeznek a különböző objektumokban, akkor Group-Object a tulajdonság első előfordulásának .NET Core-típusát használja az adott 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á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.Valuenevű csoportban.