Group-Object
Grupuje obiekty, które zawierają tę samą wartość dla określonych właściwości.
Składnia
HashTable
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Opis
Polecenie cmdlet Group-Object wyświetla obiekty w grupach na podstawie wartości określonej właściwości.
Group-Object zwraca tabelę z jednym wierszem dla każdej wartości właściwości i kolumną, która wyświetla liczbę elementów o tej wartości.
Jeśli określisz więcej niż jedną właściwość, Group-Object najpierw grupuje je według wartości pierwszej właściwości, a następnie w każdej grupie właściwości grupuje ją według wartości następnej właściwości.
Począwszy od programu PowerShell 7, Group-Object można połączyć CaseSensitive i asHashtable parametrów, aby utworzyć tabelę skrótów z uwzględnieniem wielkości liter. Klucze tabeli skrótów używają porównań z uwzględnieniem wielkości liter i wyprowadzają obiekt System.Collections.Hashtable.
Przykłady
Przykład 1. Grupowanie plików według rozszerzenia
Ten przykład rekursywnie pobiera pliki w $PSHOME i grupuje je według rozszerzenia nazwy pliku. Dane wyjściowe są wysyłane do polecenia cmdlet Sort-Object, które sortuje je według plików liczbowych znalezionych dla danego rozszerzenia. Pusta Nazwa reprezentuje katalogi.
W tym przykładzie użyto parametru NoElement, aby pominąć elementy członkowskie grupy.
$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
...
Przykład 2: Grupowanie liczb całkowitych według kursy, a nawet
W tym przykładzie pokazano, jak używać bloków skryptu jako wartości parametru Property. To polecenie wyświetla liczby całkowite z zakresu od 1 do 20, pogrupowane według szans, a nawet.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Przykład 3. Grupowanie zdarzeń dziennika zdarzeń według parametru EntryType
W tym przykładzie przedstawiono 1000 najnowszych wpisów w dzienniku zdarzeń systemu pogrupowanych według EntryType.
W danych wyjściowych kolumna Count reprezentuje liczbę wpisów w każdej grupie. Kolumna Name reprezentuje wartości EventType definiujące grupę. Kolumna Grupowanie reprezentuje obiekty w każdej grupie.
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...}
Przykład 4. Grupowanie procesów według klasy priorytetu
W tym przykładzie pokazano efekt parametru NoElement. Te polecenia grupuje procesy na komputerze według klasy priorytetu.
Pierwsze polecenie używa polecenia cmdlet Get-Process, aby pobrać procesy na komputerze i wysyła obiekty w dół potoku.
Group-Objectgrupuje obiekty według wartości właściwości PriorityClass procesu.
W drugim przykładzie użyto parametru NoElement w celu wyeliminowania elementów członkowskich grupy z danych wyjściowych. Wynikiem jest tabela zawierająca tylko wartość właściwości Count i Name.
Wyniki są wyświetlane w poniższych przykładowych danych wyjściowych.
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
Przykład 5. Grupowanie procesów według nazwy
W poniższym przykładzie użyto Group-Object do grupowania wielu wystąpień procesów uruchomionych na komputerze lokalnym.
Where-Object wyświetla procesy z więcej niż jednym wystąpieniem.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Przykład 6. Grupowanie obiektów w tabeli skrótów
W tym przykładzie użyto parametrów AsHashTable i AsString, aby zwrócić grupy w tabeli skrótów jako kolekcję par klucz-wartość.
W wynikowej tabeli skrótów każda wartość właściwości jest kluczem, a elementy grupy są wartościami. Ponieważ każdy klucz jest właściwością obiektu tabeli skrótów, można użyć notacji kropkowej, aby wyświetlić wartości.
Pierwsze polecenie pobiera polecenia cmdlet Get i Set w sesji, grupuje je według czasownika, zwraca grupy jako tabelę skrótów i zapisuje tabelę skrótów w zmiennej $A.
Drugie polecenie wyświetla tabelę skrótów w $A. Istnieją dwie pary klucz-wartość— jedna dla poleceń cmdlet Get i jedna dla poleceń cmdlet Set.
Trzecie polecenie używa notacji kropkowej, $A.Get wyświetlić wartości klucza Get w $A. Wartości to obiekt CmdletInfo. Parametr AsString nie konwertuje obiektów w grupach na ciągi.
$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
...
Przykład 7: Tworzenie tabeli skrótów z uwzględnieniem wielkości liter
Ten przykład łączy parametry CaseSensitive i AsHashTable w celu utworzenia tabeli skrótów z uwzględnieniem wielkości liter. Pliki w przykładzie mają rozszerzenia .txt i .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}
Zmienna $hash przechowuje obiekt System.Collections.Hashtable.
Get-ChildItem pobiera nazwy plików z katalogu C:\Files i wysyła obiekty System.IO.FileInfo potoku.
Group-Object grupuje obiekty przy użyciu wartości właściwości Extension. Parametry CaseSensitive i AsHashTable tworzą tabelę skrótów, a klucze są grupowane przy użyciu kluczy z uwzględnieniem wielkości liter .txt i .TXT.
Parametry
-AsHashTable
Wskazuje, że to polecenie cmdlet zwraca grupę jako tabelę skrótów. Klucze tabeli skrótów są wartościami właściwości, według których obiekty są pogrupowane. Wartości tabeli skrótów to obiekty, które mają wartość tej właściwości.
Sam parametr AsHashTable zwraca każdą tabelę skrótów, w której każdy klucz jest wystąpieniem pogrupowanego obiektu. W przypadku użycia z parametrem AsString klucze w tabeli skrótów są ciągami.
Począwszy od programu PowerShell 7, aby utworzyć tabele skrótów z uwzględnieniem wielkości liter, dołącz caseSensitive i asHashtable w poleceniu.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
| Aliasy: | AHT |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-AsString
Wskazuje, że to polecenie cmdlet konwertuje klucze tabeli skrótów na ciągi. Domyślnie klucze tabeli skrótów są wystąpieniami pogrupowanego obiektu. Ten parametr jest prawidłowy tylko w przypadku użycia z parametrem AsHashTable.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-CaseSensitive
Wskazuje, że to polecenie cmdlet sprawia, że uwzględniana jest wielkość liter grupowania. Bez tego parametru wartości właściwości obiektów w grupie mogą mieć różne przypadki.
Począwszy od programu PowerShell 7, aby utworzyć tabele skrótów z uwzględnieniem wielkości liter, dołącz caseSensitive i asHashtable w poleceniu.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Culture
Określa kulturę, która ma być używana podczas porównywania ciągów.
Właściwości parametru
| Typ: | String |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-InputObject
Określa obiekty do grupowania. Wprowadź zmienną zawierającą obiekty lub wpisz polecenie lub wyrażenie, które pobiera obiekty.
W przypadku użycia parametru InputObject w celu przesłania kolekcji obiektów do Group-ObjectGroup-Object odbiera jeden obiekt reprezentujący kolekcję. W rezultacie tworzy pojedynczą grupę z tym obiektem jako element członkowski.
Aby zgrupować obiekty w kolekcji, należy przekazać obiekty do Group-Object.
Właściwości parametru
| Typ: | PSObject |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | True |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-NoElement
Wskazuje, że to polecenie cmdlet pomija członków grupy z wyników.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Property
Określa właściwości grupowania. Obiekty są rozmieszczane w grupach na podstawie wartości określonej właściwości.
Wartość parametru Property może być nową właściwością obliczeniową. Właściwość obliczeniowa może być blokiem skryptu lub tabelą skrótów. Prawidłowe pary klucz i wartość to:
- Wyrażenie —
<string>lub<script block>
Aby uzyskać więcej informacji, odnieś się do about_Calculated_Properties.
Właściwości parametru
| Typ: | Object[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | 0 |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
CommonParameters
To polecenie cmdlet obsługuje typowe parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction i -WarningVariable. Aby uzyskać więcej informacji, zobacz about_CommonParameters.
Dane wejściowe
PSObject
Możesz przekazać dowolny obiekt do Group-Object.
Dane wyjściowe
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
W przypadku użycia parametru Group-ObjectAsHashTable zwraca obiekt Hashtable.
W przeciwnym razie zwraca obiekt
Uwagi
Do grupowania obiektów można użyć parametru GroupBy poleceń cmdlet formatowania, takich jak Format-Table i Format-List. W przeciwieństwie do Group-Object, która tworzy pojedynczą tabelę z wierszem dla każdej wartości właściwości, parametry GroupBy tworzą tabelę dla każdej wartości właściwości z wierszem dla każdego elementu, który ma wartość właściwości.
Group-Object nie wymaga, aby grupowane obiekty były tego samego typu platformy Microsoft .NET Core. Podczas grupowania obiektów różnych typów Group-Object platformy .NET Core używa następujących reguł:
Te same nazwy właściwości i typy.
Jeśli obiekty mają właściwość o określonej nazwie, a wartości właściwości mają ten sam typ platformy .NET Core, wartości właściwości są grupowane przy użyciu tych samych reguł, które byłyby używane dla obiektów tego samego typu.
Te same nazwy właściwości, różne typy.
Jeśli obiekty mają właściwość o określonej nazwie, ale wartości właściwości mają inny typ .NET Core w różnych obiektach,
Group-Objectużywa typu .NET Core pierwszego wystąpienia właściwości jako typu .NET Core dla tej grupy właściwości. Gdy obiekt ma właściwość o innym typie, wartość właściwości jest konwertowana na typ dla tej grupy. Jeśli konwersja typu nie powiedzie się, obiekt nie jest uwzględniony w grupie.Brakujące właściwości.
Nie można grupować obiektów, które nie mają określonej właściwości. Obiekty, które nie są zgrupowane, są wyświetlane w końcowych danych wyjściowych obiektu GroupInfo w grupie o nazwie
AutomationNull.Value.