Group-Object
Группы объектов, содержащих одно и то же значение для указанных свойств.
Синтаксис
HashTable
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Описание
Командлет Group-Object
отображает объекты в группах на основе значения указанного свойства.
Group-Object
возвращает таблицу с одной строкой для каждого значения свойства и столбца, отображающего количество элементов с этим значением.
Если указать несколько свойств, Group-Object
сначала группировать их по значениям первого свойства, а затем в каждой группе свойств он группировать по значению следующего свойства.
Примеры
Пример 1. Группирование файлов по расширению
В этом примере рекурсивно получает файлы в $PSHOME
и группирует их по расширению имени файла. Выходные данные отправляются в командлет Sort-Object
, который сортирует их по файлам подсчета, найденным для данного расширения. Пустой Name представляет каталоги.
В этом примере используется параметр 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. Группирование целых чисел по коэффициентам и даже
В этом примере показано, как использовать блоки скриптов в качестве значения параметра свойства
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 представляет количество записей в каждой группе. Столбец имени представляет значения 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 для удаления членов группы из выходных данных. Результатом является таблица только со значением свойства счетчика и 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 AsHashTable и AsString для возврата групп в хэш-таблице в виде коллекции пар "ключ-значение".
В результирующей хэш-таблице каждое значение свойства является ключом, а элементы группы — значениями. Так как каждый ключ является свойством хэш-табличного объекта, для отображения значений можно использовать нотацию точек.
Первая команда получает командлеты Get
и Set
в сеансе, группирует их по команде, возвращает группы в виде хэш-таблицы и сохраняет хэш-таблицу в переменной $A
.
Вторая команда отображает хэш-таблицу в $A
. Существует две пары "ключ-значение", одна для командлетов Get
и одна для командлетов Set
.
Третья команда использует нотацию точек, $A.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 ключи в хэш-таблице являются строками.
Свойства параметра
Тип: | SwitchParameter |
Default value: | False |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Aliases: | AHT |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-AsString
Указывает, что этот командлет преобразует хэш-ключи таблицы в строки. По умолчанию хэш-ключи таблицы являются экземплярами сгруппированного объекта. Этот параметр действителен только при использовании с параметром AsHashTable.
Свойства параметра
Тип: | SwitchParameter |
Default value: | False |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-CaseSensitive
Указывает, что этот командлет делает группирование чувствительным к регистру. Без этого параметра значения свойств объектов в группе могут иметь разные случаи.
Свойства параметра
Тип: | SwitchParameter |
Default value: | False |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Culture
Задает язык и региональные параметры, используемые при сравнении строк.
Свойства параметра
Тип: | String |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-InputObject
Указывает объекты для группировки. Введите переменную, содержащую объекты, или введите команду или выражение, которое получает объекты.
При использовании параметра InputObject для отправки коллекции объектов в Group-Object
Group-Object
получает один объект, представляющий коллекцию. В результате она создает одну группу с этим объектом в качестве члена.
Чтобы сгруппировать объекты в коллекции, передайте объекты в Group-Object
.
Свойства параметра
Тип: | PSObject |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | True |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-NoElement
Указывает, что этот командлет пропускает члены группы из результатов.
Свойства параметра
Тип: | SwitchParameter |
Default value: | False |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Property
Задает свойства для группировки. Объекты упорядочены в именованные группы на основе значения указанных свойств. Если свойство не указано, объекты группируются по их значению или ToString()
представлению их значения. Выходные данные представлены в порядке создания объектов группы.
Значение параметра свойства
- Выражение:
<string>
или<script block>
См. раздел about_Calculated_Propertiesдля получения дополнительных сведений.
Свойства параметра
Тип: | Object[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | 0 |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
PSObject
Вы можете передать любой объект в этот cmdlet.
Выходные данные
GroupInfo
По умолчанию этот командлет возвращает объект GroupInfo.
Hashtable
При использовании параметра asHashTable этот командлет возвращает объект hashtable.
Примечания
Windows PowerShell включает следующие псевдонимы для Group-Object
:
group
Для группирования объектов можно использовать параметр GroupBy командлетов форматирования, например Format-Table
и Format-List
. В отличие от Group-Object
, которая создает одну таблицу со строкой для каждого значения свойства, параметры GroupBy создают таблицу для каждого значения свойства со строкой для каждого элемента, имеющего значение свойства.
Group-Object
не требует, чтобы объекты, сгруппированные, были одинаковыми типами Microsoft .NET.
При группировке объектов различных типов .NET Group-Object
использует следующие правила:
Одинаковые имена и типы свойств.
Если объекты имеют свойство с указанным именем, а значения свойств имеют одинаковый тип .NET, значения свойств группируются по тем же правилам, которые будут использоваться для объектов одного типа.
Одинаковые имена свойств, разные типы.
Если объекты имеют свойство с указанным именем, но значения свойств имеют другой тип .NET в разных объектах,
Group-Object
использует тип .NET первого вхождения свойства в качестве типа .NET для этой группы свойств. Если объект имеет свойство с другим типом, значение свойства преобразуется в тип для этой группы. Если преобразование типов завершается ошибкой, объект не входит в группу.Отсутствующие свойства.
Объекты, у которых нет указанного свойства, нельзя сгруппировать. Объекты, которые не сгруппированы, отображаются в окончательном выводе объекта GroupInfo в группе с именем
AutomationNull.Value
.
Выходные группы представлены в порядке создания группы. Элементы, принадлежащие каждой группе, не отсортированы. Они перечислены в том порядке, в котором они были получены.