Group-Object
Группирует объекты, в которых указанные свойства имеют одно и то же значение.
Синтаксис
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Описание
Командлет Group-Object
отображает объекты в группах на основе значения указанного свойства.
Group-Object
возвращает таблицу с одной строкой для каждого значения свойства и столбцом, в котором отображается количество элементов с этим значением.
Если указать несколько свойств, Group-Object
сначала группируйте их по значениям первого свойства, а затем в каждой группе свойств — по значению следующего свойства.
Начиная с PowerShell 7, Group-Object
можно объединять параметры CaseSensitive и AsHashtable для создания хэш-таблицы с учетом регистра. Ключи хэш-таблицы используют сравнения с учетом регистра и вывод объекта System.Collections.Hashtable .
Примеры
Пример 1. Группировка файлов по расширению
Этот пример рекурсивно получает файлы $PSHOME
в и группирует их по расширению имени файла. Выходные данные отправляются в Sort-Object
командлет , который сортирует их по количеству файлов, найденных для данного расширения. Пустое имя представляет каталоги.
В этом примере используется параметр NoElement для пропуска членов группы.
$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
...
Пример 2. Группирование целых чисел по коэффициентам и четным значениям
В этом примере показано, как использовать блоки скрипта в качестве значения параметра Property . Эта команда отображает целые числа от 1 до 20, сгруппированные по коэффициентам и четным значениям.
1..20 | Group-Object -Property {$_ % 2}
Count Name Group
----- ---- -----
10 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Пример 3. Группирование событий журнала событий по EntryType
В этом примере отображаются 1000 последних записей в журнале системных событий, сгруппированных по Типу записи.
В выходных данных столбец Count представляет количество записей в каждой группе. Столбец Имя представляет значения EventType , определяющие группу. Столбец Группа представляет объекты в каждой группе.
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...}
Пример 4. Группирование процессов по классу приоритета
В этом примере демонстрируется влияние параметра NoElement . Эти команды группируют процессы на компьютере по классу приоритета.
Первая команда использует Get-Process
командлет для получения процессов на компьютере и отправляет объекты в конвейер. Group-Object
группирования объектов по значению свойства PriorityClass процесса.
Во втором примере используется параметр NoElement для исключения членов группы из выходных данных. Результатом будет таблица только со значениями свойств Count и Name .
Результаты отображаются в следующем примере вывода.
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
Пример 5. Группирование процессов по имени
В следующем примере используется для Group-Object
группировки нескольких экземпляров процессов, запущенных на локальном компьютере. Where-Object
отображает процессы с несколькими экземплярами.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Пример 6. Группировка объектов в хэш-таблице
В этом примере используются параметры AsHashTable и AsString для возврата групп в хэш-таблице в виде коллекции пар "ключ-значение".
В полученной хэш-таблице каждое значение свойства является ключом, а элементы группы — значениями. Поскольку каждый ключ является свойством объекта хэш-таблицы, для отображения значений можно использовать точечную нотацию.
Первая команда получает Get
командлеты и Set
в сеансе, группирует их по командам, возвращает группы в виде хэш-таблицы и сохраняет хэш-таблицу в переменной $A
.
Вторая команда отображает хэш-таблицу в $A
. Существует две пары "ключ-значение", одна для Get
командлетов и другая Set
для командлетов.
Третья команда использует точечное нотирование для $A.Get
отображения значений ключа Get в $A
. Значениями являются объект CmdletInfo . Параметр AsString не преобразует объекты в группах в строки.
$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
...
Пример 7. Create хэш-таблицы с учетом регистра
В этом примере объединяются параметры CaseSensitive и AsHashTable для создания хэш-таблицы с учетом регистра. Файлы в примере имеют расширения .txt
и .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}
Переменная $hash
хранит объект System.Collections.Hashtable . Get-ChildItem
получает имена файлов из C:\Files
каталога и отправляет объекты System.IO.FileInfo в конвейер. Group-Object
группируемые объекты с помощью расширения значения Свойства. Параметры CaseSensitive и AsHashTable создают хэш-таблицу, а ключи группируются с помощью ключей .txt
с учетом регистра и .TXT
.
Параметры
-AsHashTable
Указывает, что этот командлет возвращает группу в виде хэш-таблицы. Ключами хэш-таблицы являются значения свойств, по которым группируются объекты. Значениями хэш-таблицы являются объекты, имеющие это значение свойства.
Сам по себе параметр AsHashTable возвращает каждую хэш-таблицу, в которой каждый ключ является экземпляром сгруппированного объекта. При использовании с параметром AsString ключи в хэш-таблице являются строками.
Начиная с PowerShell 7, чтобы создавать хэш-таблицы с учетом регистра, включите в команду CaseSensitive и AsHashtable .
Type: | SwitchParameter |
Aliases: | AHT |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-AsString
Указывает, что этот командлет преобразует ключи хэш-таблицы в строки. По умолчанию ключами хэш-таблицы являются экземпляры группируемых объектов. Этот параметр действителен только при использовании с параметром AsHashTable .
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CaseSensitive
Указывает, что этот командлет учитывает регистр группировки. Без этого параметра в группу будут включаться значения свойств в разных регистрах.
Начиная с PowerShell 7, чтобы создавать хэш-таблицы с учетом регистра, включите в команду CaseSensitive и AsHashtable .
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Задает язык и региональные параметры. которые будут использоваться при сравнении строк.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Задает объекты, которые будут включаться в группу. Введите переменную, которая содержит объекты, или команду или выражение, которое возвращает объекты.
При использовании параметра InputObject для отправки коллекции объектов Group-Object
в получает Group-Object
один объект, представляющий коллекцию. В результате командлет создает одну группу, в которую входит этот объект.
Чтобы сгруппировать объекты в коллекции, передайте их по конвейеру в Group-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoElement
Указывает, что этот командлет пропускает членов группы из результатов.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Определяет свойства для группирования. Объекты объединяются в группы на основании значения заданного свойства.
Значение параметра Property может быть новым вычисляемым свойством. Вычисляемое свойство может быть блоком скрипта или хэш-таблицей. Допустимые пары "ключ-значение":
- Выражение —
<string>
или<script block>
Дополнительные сведения см. в разделе about_Calculated_Properties.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Вы можете передать любой объект в Group-Object
.
Выходные данные
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
При использовании параметра Group-Object
AsHashTable возвращает объект Hashtable.
В противном случае возвращается объект GroupInfo .
Примечания
Для группировки объектов можно использовать параметр GroupBy командлетов форматирования, таких как Format-Table
и Format-List
. В отличие от Group-Object
, который создает одну таблицу со строкой для каждого значения свойства, параметры GroupBy создают таблицу для каждого значения свойства со строкой для каждого элемента, имеющего значение свойства.
Group-Object
не требует, чтобы сгруппированные объекты были одного типа Microsoft .NET Core. При группировке объектов разных типов Group-Object
.NET Core используются следующие правила:
Одинаковые имена и типы свойств.
Если у объектов есть свойство с указанным именем, а значения свойств имеют один и тот же тип .NET Core, значения свойств группируются по тем же правилам, которые будут использоваться для объектов того же типа.
Одинаковые имена свойств, разные типы.
Если у объектов есть свойство с указанным именем, но значения свойств имеют другой тип .NET Core в разных объектах,
Group-Object
использует тип .NET Core первого вхождения свойства в качестве типа .NET Core для этой группы свойств. Если у объекта имеется свойство другого типа, значение этого свойства преобразуется в тип данной группы. Если преобразование типа завершается сбоем, объект не включается в группу.Отсутствующие свойства.
Объекты, у которых нет указанного свойства, не могут быть сгруппированы. Объекты, которые не сгруппированы, отображаются в выходных данных окончательного объекта GroupInfo в группе с именем
AutomationNull.Value
.