Поделиться через


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

Входные данные

PSObject

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

Выходные данные

GroupInfo

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

Hashtable

При использовании параметра 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.

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