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


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, сгруппированные по коэффициентам и даже.

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-ObjectGroup-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.

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