Group-Object

Mengelompokkan objek yang berisi nilai yang sama untuk properti yang ditentukan.

Sintaks

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

Deskripsi

Group-Object Cmdlet menampilkan objek dalam grup berdasarkan nilai properti tertentu. Group-Object mengembalikan tabel dengan satu baris untuk setiap nilai properti dan kolom yang menampilkan jumlah item dengan nilai tersebut.

Jika Anda menentukan lebih dari satu properti, Group-Object pertama-tama kelompokkan menurut nilai properti pertama, lalu, dalam setiap grup properti, properti dikelompokkan menurut nilai properti berikutnya.

Dimulai di PowerShell 7, Group-Object dapat menggabungkan parameter CaseSensitive dan AsHashtable untuk membuat tabel hash peka huruf besar/kecil. Kunci tabel hash menggunakan perbandingan peka huruf besar/kecil dan menghasilkan objek System.Collections.Hashtable .

Contoh

Contoh 1: Mengelompokkan file menurut ekstensi

Contoh ini secara rekursif mendapatkan file di bawah $PSHOME dan mengelompokkannya berdasarkan ekstensi nama file. Output dikirim ke Sort-Object cmdlet, yang mengurutkannya berdasarkan file hitungan yang ditemukan untuk ekstensi yang diberikan. Nama kosong mewakili direktori.

Contoh ini menggunakan parameter NoElement untuk menghilangkan anggota grup.

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

Contoh 2: Mengelompokkan bilangan bulat menurut ganjil dan genap

Contoh ini menunjukkan cara menggunakan blok skrip sebagai nilai parameter Properti . Perintah ini menampilkan bilangan bulat dari 1 hingga 20, dikelompokkan menurut ganjil dan genap.

1..20 | Group-Object -Property {$_ % 2}

Count Name                      Group
----- ----                      -----
   10 0                         {2, 4, 6, 8...}
   10 1                         {1, 3, 5, 7...}

Contoh 3: Mengelompokkan hashtable menurut nilai kunci

Dimulai di PowerShell 6, Group-Object mendukung pengurutan input hashtable menurut nilai kunci. Contoh berikut mengelompokkan array hashtable berdasarkan nilai setiap kunci hashtable weight .

Contoh ini menggunakan parameter NoElement untuk menghilangkan anggota grup.

@(
    @{ 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

Contoh 4: Mengelompokkan peristiwa log peristiwa menurut EntryType

Contoh ini menampilkan 1.000 entri terbaru dalam log peristiwa Sistem, yang dikelompokkan menurut EntryType.

Dalam output, kolom Hitung mewakili jumlah entri di setiap grup. Kolom Nama mewakili nilai EventType yang menentukan grup. Kolom Grup mewakili objek di setiap grup.

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

Contoh 5: Proses grup menurut kelas prioritas

Contoh ini menunjukkan efek parameter NoElement . Perintah ini mengelompokkan proses di komputer menurut kelas prioritas.

Perintah pertama menggunakan Get-Process cmdlet untuk mendapatkan proses di komputer dan mengirim objek ke bawah alur. Group-Objectmengelompokkan objek menurut nilai properti PriorityClass dari proses.

Contoh kedua menggunakan parameter NoElement untuk menghapus anggota grup dari output. Hasilnya adalah tabel hanya dengan nilai properti Hitungan dan Nama .

Hasilnya ditunjukkan dalam contoh output berikut.

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

Contoh 6: Proses grup berdasarkan nama

Contoh berikut menggunakan Group-Object untuk mengelompokkan beberapa instans proses yang berjalan di komputer lokal. Where-Object menampilkan proses dengan lebih dari satu instans.

Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}

Count Name
----- ----
2     csrss
5     svchost
2     winlogon
2     wmiprvse

Contoh 7: Mengelompokkan objek dalam tabel hash

Contoh ini menggunakan parameter AsHashTable dan AsString untuk mengembalikan grup dalam tabel hash, sebagai kumpulan pasangan kunci-nilai.

Dalam tabel hash yang dihasilkan, setiap nilai properti adalah kunci, dan elemen grup adalah nilainya. Karena setiap kunci adalah properti objek tabel hash, Anda dapat menggunakan notasi titik untuk menampilkan nilai.

Perintah pertama mendapatkan Get cmdlet dan Set dalam sesi, mengelompokkannya berdasarkan kata kerja, mengembalikan grup sebagai tabel hash, dan menyimpan tabel hash dalam $A variabel.

Perintah kedua menampilkan tabel hash di $A. Ada dua pasangan kunci-nilai, satu untuk Get cmdlet dan satu untuk Set cmdlet.

Perintah ketiga menggunakan notasi titik, $A.Get untuk menampilkan nilai Kunci dapatkan di $A. Nilainya adalah objek CmdletInfo . Parameter AsString tidak mengonversi objek dalam grup menjadi string.

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

Contoh 8: Membuat tabel hash peka huruf besar/kecil

Contoh ini menggabungkan parameter CaseSensitive dan AsHashTable untuk membuat tabel hash peka huruf besar/kecil. File dalam contoh memiliki ekstensi .txt dan .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}

Variabel $hash menyimpan objek System.Collections.Hashtable . Get-ChildItem mendapatkan nama file dari C:\Files direktori dan mengirim objek System.IO.FileInfo ke bawah alur. Group-Objectmengelompokkan objek menggunakan Ekstensi nilai Properti. Parameter CaseSensitive dan AsHashTable membuat tabel hash dan kunci dikelompokkan menggunakan kunci .txt peka huruf besar/kecil dan .TXT.

Parameter

-AsHashTable

Menunjukkan bahwa cmdlet ini mengembalikan grup sebagai tabel hash. Kunci tabel hash adalah nilai properti tempat objek dikelompokkan. Nilai tabel hash adalah objek yang memiliki nilai properti tersebut.

Dengan sendirinya , parameter AsHashTable mengembalikan setiap tabel hash di mana setiap kunci adalah instans objek yang dikelompokkan. Saat digunakan dengan parameter AsString , kunci dalam tabel hash adalah string.

Dimulai di PowerShell 7, untuk membuat tabel hash peka huruf besar/kecil, sertakan CaseSensitive dan AsHashtable dalam perintah Anda.

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

-AsString

Menunjukkan bahwa cmdlet ini mengonversi kunci tabel hash menjadi string. Secara default, kunci tabel hash adalah instans objek yang dikelompokkan. Parameter ini hanya valid saat digunakan dengan parameter AsHashTable .

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

-CaseSensitive

Menunjukkan bahwa cmdlet ini membuat pengelompokan peka huruf besar/kecil. Tanpa parameter ini, nilai properti objek dalam grup mungkin memiliki kasus yang berbeda.

Dimulai di PowerShell 7, untuk membuat tabel hash peka huruf besar/kecil, sertakan CaseSensitive dan AsHashtable dalam perintah Anda.

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

-Culture

Menentukan budaya yang akan digunakan saat membandingkan string.

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

-InputObject

Menentukan objek yang akan dikelompokkan. Masukkan variabel yang berisi objek, atau ketik perintah atau ekspresi yang mendapatkan objek.

Saat Anda menggunakan parameter InputObject untuk mengirimkan kumpulan objek ke Group-Object, Group-Object menerima satu objek yang mewakili koleksi. Akibatnya, ia membuat satu grup dengan objek tersebut sebagai anggotanya.

Untuk mengelompokkan objek dalam koleksi, pipa objek ke Group-Object.

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

-NoElement

Menunjukkan bahwa cmdlet ini menghilangkan anggota grup dari hasil.

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

-Property

Menentukan properti untuk pengelompokan. Objek disusun ke dalam grup bernama berdasarkan nilai properti yang ditentukan. Ketika tidak ada properti yang ditentukan, objek dikelompokkan menurut nilainya atau ToString() representasi nilainya. Output diurutkan dalam urutan naik menurut nama grup.

Nilai parameter Properti dapat menjadi properti terhitung baru. Properti terhitung dapat berupa blok skrip atau tabel hash. Pasangan kunci-nilai yang valid adalah:

  • Ekspresi - <string> atau <script block>

Untuk informasi selengkapnya, lihat about_Calculated_Properties.

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

Input

PSObject

Anda dapat menyalurkan objek apa pun ke cmdlet ini.

Output

GroupInfo

Secara default, cmdlet ini mengembalikan objek GroupInfo .

Hashtable

Saat Anda menggunakan parameter AsHashTable , cmdlet ini mengembalikan objek Hashtable .

Catatan

PowerShell menyertakan alias berikut untuk Group-Object:

  • Semua platform:
    • group

Anda dapat menggunakan parameter GroupBy dari cmdlet pemformatan, seperti Format-Table dan Format-List, untuk mengelompokkan objek. Tidak seperti Group-Object, yang membuat tabel tunggal dengan baris untuk setiap nilai properti, parameter GroupBy membuat tabel untuk setiap nilai properti dengan baris untuk setiap item yang memiliki nilai properti.

Group-Object tidak mengharuskan objek yang dikelompokkan memiliki jenis Microsoft .NET yang sama. Saat mengelompokkan objek dari jenis .NET yang berbeda, Group-Object gunakan aturan berikut:

  • Nama dan Jenis Properti yang Sama.

    Jika objek memiliki properti dengan nama yang ditentukan, dan nilai properti memiliki jenis .NET yang sama, nilai properti dikelompokkan menurut aturan yang sama yang akan digunakan untuk objek dengan jenis yang sama.

  • Nama Properti yang Sama, Jenis Yang Berbeda.

    Jika objek memiliki properti dengan nama yang ditentukan, tetapi nilai properti memiliki jenis .NET yang berbeda dalam objek yang berbeda, Group-Object menggunakan jenis .NET dari kemunculan pertama properti sebagai jenis .NET untuk grup properti tersebut. Ketika objek memiliki properti dengan jenis yang berbeda, nilai properti dikonversi ke jenis untuk grup tersebut. Jika konversi jenis gagal, objek tidak disertakan dalam grup.

  • Properti Hilang.

    Objek yang tidak memiliki properti tertentu tidak dapat dikelompokkan. Objek yang tidak dikelompokkan muncul di output objek GroupInfo akhir dalam grup bernama AutomationNull.Value.

Output diurutkan dalam urutan naik menurut nama grup. Item milik setiap grup tidak diurutkan. Mereka tercantum dalam urutan di mana mereka diterima.