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
cmdlet Group-Object
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 mengelompokkannya berdasarkan nilai properti pertama, lalu, dalam setiap grup properti, properti tersebut 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 cmdlet Sort-Object
, 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 weight
hashtable.
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, dikelompokkan menurut EntryType.
Dalam output, kolom Count 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 cmdlet Get-Process
untuk mendapatkan proses di komputer dan mengirim objek ke bawah alur.
Group-Object
mengelompokkan objek berdasarkan nilai properti PriorityClass.
Contoh kedua menggunakan parameter NoElement untuk menghapus anggota grup dari output. Hasilnya adalah tabel dengan hanya Hitungan dan nilai properti 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 cmdlet Get
dan Set
dalam sesi, mengelompokkannya berdasarkan kata kerja, mengembalikan grup sebagai tabel hash, dan menyimpan tabel hash dalam variabel $A
.
Perintah kedua menampilkan tabel hash di $A
. Ada dua pasangan kunci-nilai, satu untuk cmdlet Get
dan satu untuk cmdlet Set
.
Perintah ketiga menggunakan notasi titik, $A.Get
untuk menampilkan nilai kunci Dapatkan di $A
. Nilainya 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 direktori C:\Files
dan mengirim objek System.IO.FileInfo ke bawah alur.
Group-Object
mengelompokkan objek menggunakan nilai PropertiEkstensi. Parameter CaseSensitive dan AsHashTable membuat tabel hash dan kunci dikelompokkan menggunakan kunci peka huruf besar/kecil .txt
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.
Jenis: | SwitchParameter |
Alias: | AHT |
Position: | Named |
Nilai default: | False |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | False |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | False |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-Culture
Menentukan budaya yang akan digunakan saat membandingkan string.
Jenis: | String |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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
.
Jenis: | PSObject |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | True |
Terima karakter wildcard: | False |
-NoElement
Menunjukkan bahwa cmdlet ini menghilangkan anggota grup dari hasil.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | False |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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 representasi ToString()
dari 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.
Jenis: | Object[] |
Position: | 0 |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
Input
Anda dapat menyalurkan objek apa pun ke cmdlet ini.
Output
Secara default, cmdlet ini mengembalikan objek GroupInfo.
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 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
menggunakan 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.