При работе с PowerShell иногда требуется работать с наборами данных. Мы работаем с большим количеством файлов, учетных записей пользователей, виртуальных машин и многим другим. Когда вы отображаете эти различные объекты в консоли, они будут прокручиваться вниз по экрану один за другим без учета вашего желания видеть их определенным образом. Но это можно исправить! Используя cmdlet Group-Object
в PowerShell, вы можете группировать объекты вместе. Этот cmdlet действует подобно SQL GROUP BY statement.
PowerShell позволяет суммировать свойства объектов с использованием cmdlet Powershell Group Object. Этот cmdlet позволяет разработчику получить общий обзор множества свойств объектов сразу в группах.
Давайте создадим множество объектов одного типа. Эти объекты могут быть любого типа. Однако для этой демонстрации я буду использовать объекты System.ServiceProcess.ServiceController, возвращаемые cmdlet Get-Service
.
Чтобы Group-Object работал так, как ожидается, убедитесь, что вы группируете только объекты одного типа. Важно, чтобы у всех объектов были одинаковые свойства.
Управляйте и отчетливо отображайте информацию о домене Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Загрузите бесплатную версию для испытаний!
Group-Object без параметров
Get-Service
возвращает все службы на моем локальном компьютере. Поскольку здесь много служб, я не могу получить представление о их состоянии, типе запуска и других параметрах. Я бы хотел сначала сгруппировать эти службы по их состоянию. Чтобы сгруппировать эти службы, я направлю все объекты служб к командлету Group-Object
PowerShell и использую свойство Status
.
Обратите внимание, что, направив все службы к Powershell Group Object
, вы можете получить количество. Это большое дело, но полезное.
Группировка объектов по одному свойству
Чтобы сгруппировать их по конкретному свойству (в данном случае – по состоянию), мне нужно сказать Group-Object
, что я хочу сгруппировать по определенному свойству объекта. Это делается с помощью параметра Property
на Group-Object
.
Теперь мы говорим! Теперь я могу увидеть, сколько служб остановлено и запущено одновременно. То же самое я могу сделать и для StartType
.
Фильтрация вывода Group-Object
Возможно, я хочу углубиться и посмотреть на фактические службы в одной или нескольких из этих групп. Я могу получить эти объекты, посмотрев на свойство Group
, возвращаемое командой Powershell group object. Объект Group
содержит все службы, сгруппированные по значению свойства объекта. Чтобы получить все остановленные службы, если я группирую по статусу службы, я могу отфильтровать службы по статусу Stopped
и затем развернуть объект Group
, чтобы увидеть все эти службы.
Группировка объектов по нескольким свойствам
Не только можно группировать объекты таким образом по одному свойству, но также можно группировать их по нескольким свойствам. Возможно, вам хотелось бы увидеть все службы в зависимости от их статуса и типа запуска. Для этого мне просто нужно добавить еще одно имя свойства к параметру Property
в команде Group-Object
.
Вы можете видеть, что добавляя дополнительное свойство, вы фактически можете создавать множество сценариев “и” и группировать по стольким свойствам, сколько необходимо!
Управляйте и создавайте отчеты о службах Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Загрузите бесплатную пробную версию!
Сводка
Команда Group-Object
– это команда, которая помогает группировать похожие объекты на основе общего свойства. Группировка объектов таким образом пригодится во многих различных ситуациях. Надеюсь, изучив немного о том, как работает команда Group-Object
, вы получите больше идей по улучшению и созданию более эффективных сценариев PowerShell!
Если вы только начинаете работать с PowerShell, я настоятельно рекомендую вам ознакомиться с моим мини-курсом по созданию инструментов PowerShell!
Source:
https://adamtheautomator.com/powershell-group-object/