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 yang ditentukan. 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 berdasarkan nilai properti pertama, lalu, di 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 Sort-Object cmdlet , yang mengurutkannya berdasarkan file hitungan yang ditemukan untuk ekstensi tertentu. 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 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.Diagnostics...}
  722 Information   {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics...}
  125 Warning       {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics...}

Contoh 4: Proses grup berdasarkan kelas prioritas

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

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

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

Hasilnya ditunjukkan dalam output sampel 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 5: 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 6: 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 7: 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
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
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
Accept pipeline input:False
Accept wildcard characters:False

-Culture

Menentukan budaya yang akan digunakan saat membandingkan string.

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

-Property

Menentukan properti untuk pengelompokan. Objek disusun ke dalam grup berdasarkan nilai properti yang ditentukan.

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

Input

PSObject

Anda dapat menyalurkan objek apa pun ke Group-Object.

Output

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

Saat Anda menggunakan parameter AsHashTable , Group-Object mengembalikan objek Hashtable . Jika tidak, ia mengembalikan objek GroupInfo .

Catatan

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 Core yang sama. Saat mengelompokkan objek dari jenis .NET Core 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 Core yang sama, nilai properti dikelompokkan dengan menggunakan 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 Core yang berbeda di objek yang berbeda, Group-Object menggunakan jenis .NET Core dari kemunculan pertama properti sebagai jenis .NET Core untuk grup properti tersebut. Saat 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.