Группирует объекты, в которых указанные свойства имеют одно и то же значение.

Синтаксис

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 не преобразует объекты в группах в строки.