Group-Object
Группирует объекты, в которых указанные свойства имеют одно и то же значение.
Синтаксис
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Описание
Командлет Group-Object
отображает объекты в группах на основе значения указанного свойства.
Group-Object
возвращает таблицу с одной строкой для каждого значения свойства и столбца, отображающего количество элементов с этим значением.
Если указать несколько свойств, Group-Object
сначала группируйте их по значениям первого свойства, а затем в каждой группе свойств он группировать по значению следующего свойства.
Примеры
Пример 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 последних записей в журнале событий системы, сгруппированных по EntryType.
В выходных данных столбец Count представляет количество записей в каждой группе. Столбец Name представляет значения EventType , определяющие группу. Столбец "Группа" представляет объекты в каждой группе.
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...}
Пример 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
. Значения — объект КомандлетInfo . Параметр 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 3.0.0.0 Microsoft.PowerShell.Security
Cmdlet Get-Alias 3.1.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-AppLockerFileInformation 2.0.0.0 AppLocker
Cmdlet Get-AppLockerPolicy 2.0.0.0 AppLocker
...
Пример 10. Группирование хэш-таблицы по значениям ключей с вычисляемыми свойствами
В этом примере показано, как группировать хэш-объекты по значению их ключей. Для параметра Property можно указать один или несколько блоков скриптов. Выражения в этих скриптах используются для группировки входных данных, таких как значения именованных свойств.
@(
@{ name = 'a' ; weight = 7 }
@{ name = 'b' ; weight = 1 }
@{ name = 'c' ; weight = 3 }
@{ name = 'd' ; weight = 7 }
) | Group-Object -Property { $_.weight } -NoElement
Count Name
----- ----
2 7
1 1
1 3
Параметры
-AsHashTable
Указывает, что этот командлет возвращает группу в виде хэш-таблицы. Ключами хэш-таблицы являются значения свойств, по которым группируются объекты. Значениями хэш-таблицы являются объекты, имеющие это значение свойства.
По сути, параметр AsHashTable возвращает каждую хэш-таблицу, в которой каждый ключ является экземпляром сгруппированного объекта. При использовании с параметром AsString ключи в хэш-таблице являются строками.
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
Указывает, что этот командлет делает группирование чувствительным к регистру. Без этого параметра в группу будут включаться значения свойств в разных регистрах.
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
Определяет свойства для группирования. Объекты упорядочены в именованные группы на основе значения указанных свойств. Если свойство не указано, объекты группируются по их значению или ToString()
представлению их значения. Выходные данные представлены в порядке создания объектов группы.
Значение параметра Property может быть новым вычисляемым свойством. Вычисляемое свойство может быть блоком скрипта или хэш-таблицей. Допустимые пары "ключ-значение":
- Выражение —
<string>
или<script block>
Дополнительные сведения см. в about_Calculated_Properties.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Вы можете передать любой объект в этот командлет.
Выходные данные
По умолчанию этот командлет возвращает объект GroupInfo .
При использовании параметра AsHashTable этот командлет возвращает объект Hashtable.
Примечания
Windows PowerShell включает следующие псевдонимы для Group-Object
:
group
Для группирования объектов можно использовать параметр GroupBy командлетов форматирования, например Format-Table
и Format-List
.. В отличие Group-Object
от того, что создает отдельную таблицу со строкой для каждого значения свойства, параметры GroupBy создают таблицу для каждого значения свойства со строкой для каждого элемента, имеющего значение свойства.
Group-Object
Не требуется, чтобы объекты, сгруппированные, были одинаковыми типами Microsoft .NET.
При группировке объектов разных типов Group-Object
.NET используются следующие правила:
Одинаковые имена и типы свойств.
Если объекты имеют свойство с указанным именем, а значения свойств имеют одинаковый тип .NET, значения свойств группируются по тем же правилам, которые будут использоваться для объектов одного типа.
Одинаковые имена свойств, разные типы.
Если объекты имеют свойство с указанным именем, но значения свойств имеют другой тип .NET в разных объектах,
Group-Object
использует тип .NET первого вхождения свойства в качестве типа .NET для этой группы свойств. Если у объекта имеется свойство другого типа, значение этого свойства преобразуется в тип данной группы. Если преобразование типов завершается ошибкой, объект не входит в группу.Отсутствующие свойства.
Объекты, у которых нет указанного свойства, нельзя сгруппировать. Объекты, которые не сгруппированы, отображаются в выходных данных объекта GroupInfo в группе с именем
AutomationNull.Value
.
Выходные группы представлены в порядке создания группы. Элементы, принадлежащие каждой группе, не отсортированы. Они перечислены в том порядке, в котором они были получены.
Связанные ссылки
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по