Группирует объекты, в которых указанные свойства имеют одно и то же значение.
Синтаксис
Group-Object [-AsHashTable] [-AsString] [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-InputObject <psobject>] [-NoElement] [<CommonParameters>]
Описание
Командлет Group-Object отображает объекты в виде групп, построенных на основании значений заданных свойств. Командлет Group-Object возвращает таблицу, каждая строка которой соответствует одному значению свойства, а в столбце отображается количество элементов с этим значением.
Если задать более одного свойства, командлет Group-Object сначала сгруппирует их по значениям первого свойства, а затем, внутри каждой из групп свойств, по значениям следующего свойства.
Параметры
-AsHashTable
Возвращает группу в форме хэш-таблицы. Ключами хэш-таблицы являются значения свойств, по которым группируются объекты. Значениями хэш-таблицы являются объекты, имеющие это значение свойства.
Сам по себе параметр AsHashTable возвращает каждую хэш-таблицу, в которой ключи являются экземплярами группируемых объектов. При использовании с параметром AsString ключи хэш-таблицы являются строками.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
GroupInfo object |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-AsString
Преобразует ключи хэш-таблицы в строки. По умолчанию ключами хэш-таблицы являются экземпляры группируемых объектов. Этот параметр допустим только при использовании с параметром AsHashTable.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
GroupInfo objects |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-CaseSensitive
Включает группировку с учетом регистра. Без указания этого параметра регистры значений свойств объектов в одной группе могут различаться.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Culture <string>
Задает культуру, используемую при сравнении строк.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-InputObject <psobject>
Задает объекты, включаемые в группу. Введите переменную, содержащую объекты, либо команду или выражение для получения объектов.
Если для передачи коллекции объектов командлету Group-Object используется параметр InputObject, командлет Group-Object получает один объект, представляющий коллекцию. В результате он создает одну группу, элементом которой является этот объект.
Чтобы сгруппировать объекты в коллекции, передайте их командлету Group-Object с помощью конвейера.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
true (ByValue) |
Принимать подстановочные знаки? |
false |
-NoElement
Исключает элементы группы из результатов.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Property <Object[]>
Задает свойства для группировки. Объекты объединяются в группы на основании значения заданного свойства.
Значение параметра Property может быть новым вычисляемым свойством. Чтобы создать вычисляемое свойство, создайте хэш-таблицу с ключом Expression, задающим строковое значение или блок скрипта.
Обязательно? |
false |
Позиция? |
1 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
<CommonParameters>
Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.
Ввод и вывод
Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.
Входные данные |
System.Management.Automation.PSObject Любой объект можно передать командлету Group-Object по конвейеру. |
Выходные данные |
Microsoft.PowerShell.Commands.GroupInfo или System.Collections.Hashtable Если задан параметр AsHashTable, командлет Group-Object возвращает хэш-таблицу. В противном случае он возвращает объект GroupInfo. |
Примечания
Для группировки объектов можно также использовать параметр GroupBy командлетов форматирования (например, Format-Table [m2] или Format-List [m2]). В отличие от командлета Group-Object, создающего единую таблицу, в которой каждому значению свойства соответствует отдельная строка, параметры GroupBy создают для каждого значения свойства отдельную таблицу, в строках которой указываются элементы, обладающие свойством с заданным значением.
Командлет Group-Object не требует, чтобы группируемые объекты относились к одному типу Microsoft .NET Framework. При группировке объектов различных типов .NET Framework командлет Group-Object использует следующие правила.
-- Одинаковые имена и типы свойств. Если у объектов имеется свойство с заданным именем, а значения этого свойства относятся к одному типу .NET Framework, значения свойства группируются по тем же правилам, по которым группировались бы объекты одного типа.
-- Одинаковые имена свойств, различные типы. Если у объектов имеется свойство с заданным именем, но значения этих свойств в разных объектах принадлежат к различным типам .NET Framework, командлет Group-Object использует в качестве типа .NET Framework для группы свойств тип первого вхождения данного свойства. Если у объекта имеется свойство другого типа, значение этого свойства преобразуется к типу данной группы. Если преобразование типов выполнить не удается, объект не включается в данную группу.
-- Отсутствующие свойства. Объекты, в которых нет указанного свойства, считаются негруппируемыми. В итоговом объекте GroupInfo такие объекты относятся к группе с именем AutomationNull.Value.
Пример 1
C:\PS>get-childitem *.doc | group-object -property length Описание ----------- Эта команда получает DOC-файлы в текущем местоположении, группируя их по размеру.
Пример 2
C:\PS>get-childitem | sort-object -property extension | group-object -property extension Описание ----------- Эта команда получает файлы в текущем местоположении, сортирует их по расширению имени файла и группирует их по расширению имени файла. Обратите внимание, что файлы сортируются до группировки.
Пример 3
C:\PS>1..35 | group-object -property {$_ % 2},{$_ % 3} Описание ----------- В этом примере показано, как использовать в качестве значения параметра Property блоки скрипта. Эта команда отображает целые числа от 1 до 35, группируя их по остатку от деления на 2 или 3.
Пример 4
C:\PS>$events = get-eventlog -logname system -newest 1000 C:\PS> $events | group-object -property eventID Count Name Group ----- ---- ----- 44 Information {System.Diagnostics.EventLogEntry, 5 Error {System.Diagnostics.EventLogEntry, 1 Warning {System.Diagnostics.EventLogEntry} Описание ----------- Эта команда отображает 1000 последних записей в журнале системных событий, сгруппированных по идентификатору события. Первая команда получает события с помощью командлета Get-EventLog, а затем с помощью оператора присваивания (=) сохраняет их в переменной $events. Вторая команда с помощью оператора конвейера (|) передает события из переменной $events в командлет Group-Object. Чтобы указать, что события должны группироваться в соответствии со значением свойства EventID, команда использует параметр Property. При отображении результатов в столбце Count указывается число элементов в каждой группе, в столбце Name — значения EventID, определяющие группу, а в столбце Group — объекты каждой из групп.
Пример 5
C:\PS>get-process | group-object -property priorityclass Count Name Group ----- ---- ----- 55 Normal {System.Diagnostics.Process (AdtAgent), System.Diagnostics.Process (alg), System.Dia... 1 {System.Diagnostics.Process (Idle)} 3 High {System.Diagnostics.Process (Newproc), System.Diagnostics.Process (winlogon), System.D... 2 BelowNormal {System.Diagnostics.Process (winperf), C:\PS>get-process | group-object -property company -noelement Count Name ----- ---- 55 Normal 1 3 High 2 BelowNormal Описание ----------- В этом примере показано действие параметра NoElement. Эти команды группируют процессы на компьютере по их классу приоритета. Первая команда с помощью командлета Get-Process получает выполняющиеся на компьютере процессы. С помощью оператора конвейера (|) она передает результаты в командлет Group-Object, который группирует объекты по значению свойства PriorityClass процесса. Вторая команда идентична первой, но она использует параметр NoElement, чтобы исключить из результатов элементы группы. Результатом выполнения команды является таблица, в которой указаны только имена значений свойства и число соответствующих элементов. Результаты показаны в следующем примере выходных данных.
Пример 6
C:\PS>get-eventlog -logname system -newest 1000 | group-object -property {$_.TimeWritten - $_.TimeGenerated} Описание ----------- Эта команда показывает, как задать значение параметра Property с помощью блока скрипта. Эта команда отображает 1000 последних записей в журнале системных событий, сгруппированных по интервалу между моментом создания записи и моментом ее сохранения в журнале. Эта команда с помощью командлета Get-EventLog получает текущие записи из журнала событий. Эти записи передаются командлету Group-Object с помощью оператора конвейера (|). Значение параметра Property указано как блок скрипта (выражение в фигурных скобках). Результатом обработки блока скрипта является интервал между временем создания записи и временем ее сохранения в журнале. Вычисленное значение используется для группировки 1000 последних событий.
Пример 7
C:\PS>get-childitem | group-object extension -noelement Count Name ----- ---- 21 82 .txt 9 .cmd 5 .log 12 .xml 5 .htm 36 .ps1 1 .psc1 3 .exe 6 .csv 1 .psd1 2 .bat Описание ----------- Эта команда группирует элементы в текущем каталоге по расширению имени файла. Параметр NoElement используется для исключения элементов групп. Результаты показаны в следующем примере выходных данных.
Пример 8
C:\PS>"a", "b", "c", "c", "d" | get-unique a b c d C:\PS> "a", "b", "c", "c", "d" | group-object -noelement | where {$_.Count -gt 1} Count Name ----- ---- 2 c C:\PS> get-process | group-object -property Name -noelement | where {$_.count -gt 1} Count Name ----- ---- 2 csrss 5 svchost 2 winlogon 2 wmiprvse Описание ----------- В этом примере показано, как находить в коллекции уникальные и неуникальные (повторяющиеся) значения свойств. Первая команда получает уникальные элементы массива путем передачи массива командлету Get-Unique по конвейеру. Вторая команда получает неуникальные элементы массива. Она по конвейеру передает массив командлету Group-Object, который группирует объекты по значению. Получаемые группы по конвейеру передаются командлету Where-Object, который выбирает объекты, относящиеся к группам с более чем одним элементом. Третья команда демонстрирует практическое применение такого подхода. Она использует этот метод для обнаружения на компьютере процессов с одинаковыми именами. Результаты показаны в следующем примере выходных данных.
Пример 9
C:\PS>$a = get-command get-*, set-* -type cmdlet | group-object -property verb -ashashtable -asstring C:\PS> $a Name Value ---- ----- Get {Get-PSCallStack, Get-PSBreakpoint, Get-PSDrive, Get-PSSession...} Set {Set-Service, Set-StrictMode, Set-PSDebug, Set-PSSessionConfiguration...} C:\PS> $a.get CommandType Name Definition ----------- ---- ---------- Cmdlet Get-PSCallStack Get-PSCallStack [-Verbose] [-Debug] [-ErrorAction <ActionPrefer... Cmdlet Get-PSBreakpoint Get-PSBreakpoint [[-Id] <Int32[]>] [-Verbose] [-Debug] [-ErrorA... Cmdlet Get-PSDrive Get-PSDrive [[-Name] <String[]>] [-Scope <String>] [-PSProvider... ... Описание ----------- В этом примере параметры AsHashTable и AsString используются для возврата групп в хэш-таблице, т. е. в виде набора пар "ключ-значение". В полученной хэш-таблице каждое значение свойства является ключом, а элементы групп — значениями. Поскольку каждый ключ является свойством объекта хэш-таблицы, для отображения значений можно использовать обращение через точку. Первая команда получает командлеты Get и Set в сеансе, группирует их по назначению, возвращает группы в виде хэш-таблицы и сохраняет хэш-таблицу в переменной $a. Вторая команда отображает хэш-таблицу из переменной $a. В ней имеется две пары "ключ-значение": первая для командлетов Get и вторая для командлетов Set. В третьей команде с помощью обращения через точку отображаются значения ключа Get в переменной $a. Эти значения являются объектами CmdletInfo. Параметр AsString не преобразует объекты в группах в строки.