Поиск по сайту:

Group-Object (Microsoft.PowerShell.Utility)


Group-Object

Модуль:
Microsoft.PowerShell.Utility

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

Синтаксис

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: Группировка хеш-таблиц по значению ключа

Начиная с PowerShell 6, Group-Object поддерживает сортировку входных данных хэш-таблицы по значениям ключей. В следующем примере массив хеш-таблиц группируется по значению ключа weight каждой хеш-таблицы.

В этом примере используется параметр NoElement, чтобы исключить членов группы.

@(
    @{ name = 'a' ; weight = 7 }
    @{ name = 'b' ; weight = 1 }
    @{ name = 'c' ; weight = 3 }
    @{ name = 'd' ; weight = 7 }
) | Group-Object -Property weight -NoElement

Count Name
----- ----
    1 1
    1 3
    2 7

Пример 4. Группировка событий журнала событий по типу записи.

В этом примере отображаются 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...}

Пример 5: Группировка процессов по классу приоритета

Этот пример демонстрирует действие параметра 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

Пример 6: Группировка процессов по имени

В следующем примере 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

Пример 7. Группировка объектов в хеш-таблице.

В этом примере используются параметры 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
...

Пример 8. Создание хеш-таблицы с учетом регистра

В этом примере параметры 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 группирует объекты, используя значение Property Extension. Параметры CaseSensitive и AsHashTable создают хеш-таблицу, а ключи группируются с использованием чувствительных к регистру ключей .txt и .TXT.

Параметры

-AsHashTable

Указывает, что этот командлет возвращает группу в виде хеш-таблицы. Ключами хеш-таблицы являются значения свойств, по которым группируются объекты. Значения хэш-таблицы — это объекты, имеющие это значение свойства.

Сам по себе параметр AsHashTable возвращает каждую хеш-таблицу, в которой каждый ключ является экземпляром сгруппированного объекта. При использовании с параметром AsString ключи в хеш-таблице представляют собой строки.

Начиная с PowerShell 7, для создания хэш-таблиц с учетом регистра включите в свою команду CaseSensitive и AsHashtable.

Тип :

SwitchParameter

Псевдонимы:

AHT

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-AsString

Указывает, что этот командлет преобразует ключи хэш-таблицы в строки. По умолчанию ключи хэш-таблицы являются экземплярами сгруппированного объекта. Этот параметр действителен только при использовании с параметром AsHashTable.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-CaseSensitive

Указывает, что этот командлет делает группировку чувствительной к регистру. Без этого параметра значения свойств объектов в группе могут иметь разные регистры.

Начиная с PowerShell 7, для создания хэш-таблиц с учетом регистра включите в свою команду CaseSensitive и AsHashtable.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Culture

Указывает язык и региональные параметры, которые будут использоваться при сравнении строк.

Тип :

String

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-InputObject

Указывает объекты для группировки. Введите переменную, содержащую объекты, или введите команду или выражение, позволяющее получить объекты.

Когда вы используете параметр InputObject для отправки коллекции объектов в Group-Object, Group-Object получает один объект, представляющий коллекцию. В результате создается одна группа, членом которой является этот объект.

Чтобы сгруппировать объекты в коллекции, передайте их в Group-Object.

Тип :

PSОбъект

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

True

Принимайте подстановочные знаки:

False

-NoElement

Указывает, что этот командлет исключает членов группы из результатов.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

False

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Property

Указывает свойства для группировки. Объекты группируются в именованные группы на основе значений указанных свойств. Если свойство не указано, объекты группируются по их значению или по представлению их значения в ToString(). Вывод сортируется в порядке возрастания имен групп.

Значение параметра Property может быть новым вычисляемым свойством. Вычисляемое свойство может быть блоком скрипта или хеш-таблицей. Допустимые пары ключ-значение:

  • Выражение — <string> или <script; block>

Дополнительные сведения см. в разделе about_Calculated_Properties.

Тип :

Object[]

Позиция:

0

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

PSObject

В этот командлет можно передать любой объект.

Выходы

Информация о группе

По умолчанию этот командлет возвращает объект GroupInfo.

Хеш-таблица

При использовании параметра AsHashTable этот командлет возвращает объект Hashtable.

Примечания

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.

Вывод сортируется в порядке возрастания имен групп. Элементы, принадлежащие каждой группе, не сортируются. Они перечислены в том порядке, в котором они были получены.