Group-Object
Belirtilen özellikler için aynı değeri içeren nesneleri gruplandırın.
Sözdizimi
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
Group-Object
cmdlet'i, nesneleri belirtilen özelliğin değerine göre gruplar halinde görüntüler.
Group-Object
, her özellik değeri için bir satır içeren bir tablo ve bu değere sahip öğe sayısını görüntüleyen bir sütun döndürür.
Birden fazla özellik belirtirseniz, Group-Object
önce bunları ilk özelliğin değerlerine göre gruplandırın ve ardından her özellik grubu içinde bir sonraki özelliğin değerine göre gruplandırın.
PowerShell 7'de Group-Object
, büyük/küçük harfe duyarlı karma tablo oluşturmak için CaseSensitive ve AsHashtable parametrelerini birleştirebilir. Karma tablo anahtarları büyük/küçük harfe duyarlı karşılaştırmalar kullanır ve System.Collections.Hashtable nesnesi çıktısını alır.
Örnekler
Örnek 1: Dosyaları uzantıya göre gruplandırma
Bu örnek, $PSHOME
altındaki dosyaları özyinelemeli olarak alır ve dosya adı uzantısına göre gruplandırır. Çıkış, Sort-Object
cmdlet'ine gönderilir ve bu cmdlet'leri verilen uzantı için bulunan sayı dosyalarına göre sıralar. Boş Adı dizinleri temsil eder.
Bu örnekte, grubun üyelerini atlamak için NoElement parametresi kullanılır.
$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
...
Örnek 2: Tamsayıları oranlara ve çiftlere göre gruplandırma
Bu örnekte, Özelliği parametresinin değeri olarak betik bloklarının nasıl kullanılacağı gösterilmektedir. Bu komut, 1 ile 20 arasında tamsayıları oranlara ve çifte göre gruplandırarak görüntüler.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Örnek 3: Karma tablolarını anahtar değerine göre gruplandırma
PowerShell 6'da Group-Object
, anahtar değerlerine göre karma tablo girişi sıralamayı destekler.
Aşağıdaki örnek, bir karma tablo dizisini her karma tablo weight
anahtarının değerine göre gruplandırılır.
Bu örnekte, grubun üyelerini atlamak için NoElement parametresi kullanılır.
@(
@{ 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
Örnek 4: Olay günlüğü olaylarını EntryType'a göre gruplandırma
Bu örnekte, System olay günlüğünde EntryType gruplandırılarak en son 1.000 girdi görüntülenir.
Çıktıda, Sayısı sütunu her gruptaki girdi sayısını temsil eder. Adı sütunu, bir grubu tanımlayan EventType değerlerini temsil eder. Grubu sütunu her gruptaki nesneleri temsil eder.
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...}
Örnek 5: İşlemleri öncelik sınıfına göre gruplandırma
Bu örnek, NoElement parametresinin etkisini gösterir. Bu komutlar bilgisayardaki işlemleri öncelik sınıfına göre gruplandırıyor.
İlk komut, bilgisayardaki işlemleri almak için Get-Process
cmdlet'ini kullanır ve nesneleri işlem hattına gönderir.
Group-Object
, nesneleri işlemin PriorityClass özelliğinin değerine göre gruplandırmaktadır.
İkinci örnek, grubun üyelerini çıktıdan kaldırmak için NoElement parametresini kullanır. Sonuç, yalnızca Sayısı ve Adı özellik değerine sahip bir tablodur.
Sonuçlar aşağıdaki örnek çıktıda gösterilmiştir.
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
Örnek 6: İşlemleri ada göre gruplandırma
Aşağıdaki örnek, yerel bilgisayarda çalışan birden çok işlem örneğini gruplandırmak için Group-Object
kullanır.
Where-Object
birden fazla örneği olan işlemleri görüntüler.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Örnek 7: Karma tablodaki nesneleri gruplandırma
Bu örnekte AsHashTable ve AsString parametreleri, karma tablodaki grupları anahtar-değer çiftleri koleksiyonu olarak döndürür.
Sonuçta elde edilen karma tabloda her özellik değeri bir anahtardır ve grup öğeleri değerlerdir. Her anahtar karma tablo nesnesinin bir özelliği olduğundan, değerleri görüntülemek için nokta gösterimi kullanabilirsiniz.
İlk komut oturumdaki Get
ve Set
cmdlet'lerini alır, fiillere göre gruplandırır, grupları karma tablo olarak döndürür ve karma tabloyu $A
değişkenine kaydeder.
İkinci komut $A
karma tablosunu görüntüler. Biri Get
cmdlet'leri, diğeri de Set
cmdlet'leri için iki anahtar-değer çifti vardır.
Üçüncü komut, $A.Get
Get anahtarının değerlerini görüntülemek için noktalı gösterim $A
kullanır. Değerler CmdletInfo nesnesidir.
AsString parametresi, gruplardaki nesneleri dizelere dönüştürmez.
$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
...
Örnek 8: Büyük/küçük harfe duyarlı karma tablo oluşturma
Bu örnek, büyük/küçük harfe duyarlı karma tablo oluşturmak için CaseSensitive ve AsHashTable parametrelerini birleştirir. Örnekteki dosyaların .txt
ve .TXT
uzantıları vardır.
$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}
$hash
değişkeni System.Collections.Hashtable nesnesini depolar.
Get-ChildItem
C:\Files
dizininden dosya adlarını alır ve System.IO.FileInfo nesnelerini işlem hattına gönderir.
Group-Object
, uzantı Özelliği değerini kullanarak nesneleri gruplandırmaktadır.
CaseSensitive ve AsHashTable parametreleri karma tabloyu oluşturur ve anahtarlar .txt
ve .TXT
büyük/küçük harfe duyarlı anahtarlar kullanılarak gruplandırılır.
Parametreler
-AsHashTable
Bu cmdlet'in grubu karma tablo olarak döndürdüğünü gösterir. Karma tablosunun anahtarları, nesnelerin gruplandırıldığı özellik değerleridir. Karma tablosunun değerleri, bu özellik değerine sahip nesnelerdir.
Tek başına, AsHashTable parametresi, her anahtarın gruplandırılmış nesnenin bir örneği olduğu her karma tabloyu döndürür. AsString parametresiyle kullanıldığında karma tablodaki anahtarlar dizelerdir.
PowerShell 7'de başlayarak büyük/küçük harfe duyarlı karma tablolar oluşturmak için CaseSensitive ve AsHashtable komutuna ekleyin.
Tür: | SwitchParameter |
Diğer adlar: | AHT |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-AsString
Bu cmdlet'in karma tablo anahtarlarını dizelere dönüştürdüğünü gösterir. Karma tablo anahtarları varsayılan olarak gruplandırılmış nesnenin örnekleridir. Bu parametre yalnızca AsHashTable parametresiyle kullanıldığında geçerlidir.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-CaseSensitive
Bu cmdlet'in gruplandırma büyük/küçük harfe duyarlı olduğunu gösterir. Bu parametre olmadan, bir gruptaki nesnelerin özellik değerleri farklı durumlara sahip olabilir.
PowerShell 7'de başlayarak büyük/küçük harfe duyarlı karma tablolar oluşturmak için CaseSensitive ve AsHashtable komutuna ekleyin.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-Culture
Dizeleri karşılaştırırken kullanılacak kültürü belirtir.
Tür: | String |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-InputObject
Gruplandıracak nesneleri belirtir. Nesneleri içeren bir değişken girin veya nesneleri alan bir komut veya ifade yazın.
InputObject parametresini kullanarak Group-Object
bir nesne koleksiyonu gönderdiğinizde Group-Object
koleksiyonu temsil eden bir nesne alır. Sonuç olarak, bu nesnenin üyesi olarak tek bir grup oluşturur.
Bir koleksiyondaki nesneleri gruplandırmak için, nesneleri Group-Object
'e yöneltin.
Tür: | PSObject |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | True |
Joker karakterleri kabul et: | False |
-NoElement
Bu cmdlet'in bir grubun üyelerini sonuçlardan atladığını gösterir.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-Property
Gruplandırma özelliklerini belirtir. Nesneler, belirtilen özelliklerin değerine göre adlandırılmış gruplar halinde düzenlenir. Hiçbir özellik belirtilmediğinde, nesneler değerlerine veya değerlerinin ToString()
gösterimine göre gruplandırılır. Çıkış, grup adlara göre artan düzende sıralanır.
Özelliği parametresinin değeri yeni bir hesaplanmış özellik olabilir. Hesaplanan özellik bir betik bloğu veya karma tablo olabilir. Geçerli anahtar-değer çiftleri şunlardır:
- İfade -
<string>
veya<script block>
Daha fazla bilgi için bkz. about_Calculated_Properties.
Tür: | Object[] |
Position: | 0 |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
Girişler
Herhangi bir nesneyi bu cmdlet'e yöneltebilirsiniz.
Çıkışlar
Varsayılan olarak, bu cmdlet bir GroupInfo nesnesi döndürür.
AsHashTable parametresini kullandığınızda, bu cmdlet bir Hashtable nesnesi döndürür.
Notlar
PowerShell, Group-Object
için aşağıdaki diğer adları içerir:
- Tüm platformlar:
group
Nesneleri gruplandırmak için ve Format-Table
gibi biçimlendirme cmdlet'lerinin Format-List
parametresini kullanabilirsiniz. her özellik değeri için bir satır içeren tek bir tablo oluşturan Group-Object
aksine, GroupBy parametreleri, özellik değerine sahip her öğe için bir satır içeren her özellik değeri için bir tablo oluşturur.
Group-Object
gruplandırılan nesnelerin aynı Microsoft .NET türünde olmasını gerektirmez.
Farklı .NET türlerinde nesneleri gruplandırırken Group-Object
aşağıdaki kuralları kullanır:
Aynı Özellik Adları ve Türleri.
Nesnelerin belirtilen ada sahip bir özelliği varsa ve özellik değerleri aynı .NET türüne sahipse, özellik değerleri aynı türdeki nesneler için kullanılacak aynı kurallara göre gruplandırılır.
Aynı Özellik Adları, Farklı Türler.
Nesnelerin belirtilen ada sahip bir özelliği varsa, ancak özellik değerleri farklı nesnelerde farklı bir .NET türüne sahipse,
Group-Object
özelliğin ilk geçtiği .NET türünü bu özellik grubu için .NET türü olarak kullanır. Bir nesnenin farklı türde bir özelliği olduğunda, özellik değeri bu grubun türüne dönüştürülür. Tür dönüştürme başarısız olursa, nesne gruba dahil değildir.Eksik Özellikler.
Belirtilen özelliğe sahip olmayan nesneler gruplandırılamaz. Gruplandırlanmamış nesneler, adlı bir gruptaki groupInfo
AutomationNull.Value
görünür.
Çıkış, grup adlara göre artan düzende sıralanır. Her gruba ait öğeler sıralanmaz. Bunlar, teslim alınma sırasına göre listelenir.