A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember
cmdlet and other cmdlets can save you a ton of time.
Группы Active Directory – отличный способ разделения учетных записей пользователей. Группы позволяют администраторам определить доступ к ресурсам на многих системах.
В этой статье давайте воспользуемся PowerShell для получения членов групп AD и экспорта членов групп AD. Затем вы можете использовать эту информацию для создания множества интересных отчетов.

Управление и отчетность в Active Directory, Exchange и Microsoft 365 с помощью ADManager Plus от ManageEngine. Скачать бесплатную пробную версию!
Предварительные требования
Если вы хотите следовать этой статье, убедитесь, что у вас есть следующие требования:
- Работаете на компьютере с Windows 10, присоединенном к домену
- Вошли под пользователем, который может читать группы AD и учетные записи пользователей
- Установлен модуль PowerShell Active Directory
Изучение основ
Для запроса групп AD и их членов у вас есть две командлеты PowerShell – Get-AdGroup
и Get-AdGroupMember
.
Get-ADGroup
запрашивает контроллер домена и возвращает объекты групп AD. Get-AdGroupMember
просматривает каждую группу и возвращает все учетные записи пользователей, группы, контакты и другие объекты, которые существуют в этой группе.
Получение групп AD
Чтобы найти группы AD с помощью PowerShell, вы можете использовать командлет Get-ADGroup
. Без параметров Get-ADGroup
запросит AD и вернет все группы в домене, используя параметр Filter
. Параметр Filter
обязателен. Он существует, чтобы ограничить возвращаемые группы на основе различных критериев.
Например, чтобы найти все группы без учета каких-либо критериев, используйте Get-ADGroup
и укажите подстановочный знак (звездочку) для параметра Filter
. Ниже приведен пример. Прокрутка всех этих групп может занять некоторое время, если у вас в домене сотни или даже тысячи групп.
Если вам нужно найти одну группу, вы можете использовать параметр Identity
.
Параметр Identity
является общим параметром среди всех командлетов PowerShell Active Directory. Он позволяет ограничить ваш запрос до одного объекта AD. Например, если вам нужно проверить, существует ли группа с именем HR, вы можете узнать это, запустив команду ниже.
Получение участников группы AD с помощью Get-AdGroupMember
Использование PowerShell для перечисления членов группы AD требует использования командлета Get-ADGroupMember
. Этот командлет получает пользовательские, групповые и компьютерные объекты в определенной группе. Возможно, вам нужно найти всех членов группы Администраторы. В самой простой форме вы просто используете параметр Identity
, указывая имя группы, как показано ниже.
Обратите внимание, что
Get-AdGroupMember
возвращает только членство в группе для пользователей, групп и компьютеров. Он не вернет другие объекты AD, такие как контакты.
Перечисление членов группы внутри членов группы
Как вы можете знать, группы AD могут содержать не только учетные записи пользователей, но и другие группы, также называемые вложенными. Когда группа вложена в другую группу, члены этой группы наследуют те же разрешения, назначенные родительской группе.
По умолчанию командлет PowerShell Get-AdGroupMember
не возвращает членов вложенных групп. Для исправления этого можно использовать параметр Recursive
. Например, вы можете найти членов групп, вложенных в группу HR, используя параметр Recursive
, как показано ниже.
Получение нескольких групп/членов сразу
Если вам нужно выполнить запрос к AD для множества различных групп или членов групп одновременно, вы также можете сделать это с помощью цикла PowerShell foreach. Цикл foreach выполняет команду или код для каждого элемента в коллекции. В этом случае коллекцией будет список названий групп.
Возможно, вам нужно найти всех членов групп в группах HR, бухгалтерии, и IT. Для этого сначала создайте коллекцию или массив этих названий групп. В приведенном ниже примере эта коллекция определена как $groupNames
. Затем для каждого имени в этой коллекции выполните Get-ADGroupMember
, указав имя каждой группы в параметре Identity
.
В качестве альтернативы вы можете использовать
ForEach-Object
cmdlet для перебора групп.
Использование альтернативных учетных данных
Как и многие другие cmdlet в PowerShell, у cmdlet для работы с группами AD есть параметр Credential
. По умолчанию, при выполнении любого cmdlet для работы с группами AD используются ваши учетные данные для входа в систему для запроса в Active Directory. Это означает, что вам нужно находиться на компьютере в домене и быть в системе как пользователь Active Directory с соответствующими разрешениями.
Но что, если вы находитесь на рабочем компьютере или вам нужно аутентифицироваться в AD от имени другого пользователя? В этом случае вы можете использовать параметр Credential
. Этот параметр позволяет указать имя пользователя и пароль для аутентификации.
Например, возможно, вашей учетной записи пользователя не хватает прав для выполнения задачи в AD. У вас есть учетная запись службы с дополнительными правами. Вы можете быть в системе в качестве обычного пользователя, но при этом аутентифицироваться с учетной записью службы, как показано ниже.
Команда Get-Credential
запрашивает имя пользователя/пароль для создания учетных данных. Затем эти учетные данные передаются командлету Get-AdGroup
для аутентификации.
Параметр
Credential
является универсальным в PowerShell для предоставления учетных данных аутентификации. Дополнительную информацию можно найти в статье Использование командлета PowerShell Get-Credential и все, что касается учетных данных.
Как получить членов группы с помощью Get-ADGroup?
Может показаться противоречивым, но также можно получить членов группы с помощью командлета Get-ADGroup
.
Оказывается, что Get-ADGroup
возвращает свойство для каждой группы, называемое members
. Это коллекция объектов AD, которые являются членами группы.
Например, чтобы найти членов группы HR снова без использования Get-ADGroupMember
, вы можете сделать что-то вроде этого:
Почему использовать этот метод вместо другого? Основное отличие заключается в том, что свойство members
содержит все типы объектов AD – не только пользователей, компьютеры и другие группы.
Возможно, у вас есть контакты в различных группах. Когда вы запускаете Get-ADGroupMember
, эти контакты не отображаются. Но если вы скажете Get-ADGroup
вернуть всех членов в этой группе вместе с раскрытием этой коллекции, как показано ниже, вы увидите контакты.
Поиск конкретных атрибутов AD
В разделе основы вы просто возвращали все группы и членов группы. Информация, возвращаемая для каждой группы и члена группы, представляет собой только подмножество атрибутов AD, связанных с каждым типом объекта.
Возможно, вы хотите увидеть адрес электронной почты учетной записи пользователя, дату последнего входа в систему или другой ассоциированный атрибут AD? Для этого вам придется проявить креативность.
Возможно, вы смогли найти всех членов группы в HR группе, но также нужно увидеть адрес электронной почты каждой учетной записи пользователя?
Фильтрация результатов
До этого момента вы находили все группы и членов группы, но в повседневной рабочей среде вам редко нужно это делать. Скорее всего, вам нужно будет найти только ограниченное количество каждого элемента. У командлетов группы AD есть несколько способов обработки этого.
Параметр Filter
Как упоминалось ранее, у обоих командлетов есть параметр Filter
. Этот параметр позволяет ограничить то, что возвращается, множеством различных способов, выходящих за рамки этой статьи.
Используя параметр Filter
, вы можете ограничить результаты по любому атрибуту AD, такому как имя, тип группы, адрес электронной почты, последний вход для пользователей и так далее.
Например, возможно, вам нужно найти только группы безопасности. В этом случае вы укажете атрибут GroupCategory
и установите условие, чтобы гарантировать возврат только групп безопасности.
Возможно, вы хотите найти все группы безопасности, но они должны не быть группами локальной домены. Затем вы добавите еще одно условие (на этот раз, используя оператор -ne
), чтобы предотвратить возврат любых групп локальной домены.
Если вы хотите узнать, как создавать фильтры запросов, обязательно посмотрите Изучение фильтров Active Directory и LDAP в PowerShell.
Ограничение результатов групп по организационному блоку (OU)
Возможно, у вас есть различные группы, вложенные в ОБ. Вам не обязательно нужно найти все группы, а только группы в определенной ОБ. В этом случае вы можете использовать параметр SearchBase
.
Параметр SearchBase
позволяет указать отличающееся имя (DN) ОБ для начала поиска групп. Например, возможно, у вас есть ОБ с названием Местоположения в корне вашей домены. В ОБ Местоположения у вас есть каждая ОБ местоположения, созданная, например, как Остин, Нью-Йорк, и Лос-Анджелес. Вы ищете только группы в ОБ Нью-Йорка и нужно ограничить видимость остальных.
Пример структуры ОБ AD показан ниже. Обратите внимание, что другие группы существуют вне ОБ Местоположения.
Возможно, вам нужно найти все группы AD, которые находятся только в OU NYC. Чтобы ограничить запрос, вы можете использовать параметр SearchBase
, указав DN, как показано ниже. Все группы внутри OU Locations будут возвращены.
Но теперь вам нужно найти все группы в всех OU под OU Locations. Get-ADGroup
возвращает только группы в самом OU Locations – не в дочерних OU.
Чтобы получить группы внутри дочерних OU, вам нужно использовать параметр SearchScope
. Этот параметр аналогичен параметру Recursive
в том, что он также будет проверять дочерние объекты.
Например, чтобы найти все группы в любом OU под OU Locations, укажите Subtree
или 2
. Это значение для параметра SearchScope
говорит Get-ADGroup
рекурсивно просматривать все дочерние, внуковские и так далее OU.
Для полного разбора параметров параметра SearchScope
обратитесь к документации по Get-ADGroup
.
Экспорт групп AD и их членов
Таким образом, вы наконец-то знаете, как выполнять запрос и возвращать необходимые группы и их членов. Вся эта информация отправляется в консоль PowerShell. Но теперь вам нужно получить эту информацию в CSV-файл или в таблицу Excel.
Единственное, что вам нужно сделать сейчас, это отправить всю эту информацию в файл.
Экспорт в CSV
Один из популярных форматов экспорта информации из AD в CSV. В PowerShell есть удобная командлета, которая позволяет легко создавать CSV-файлы из вывода PowerShell, называется Export-Csv
.
Вы можете создать файл CSV из любой команды, описанной в этой статье, используя оператор Export-Csv
. Используя приведенный ниже пример, вы перенаправите все выходные данные, которые вернула бы команда Get-AdGroup
, вместо этого в файл CSV.
Для получения дополнительной информации об этой удобной командлете, ознакомьтесь с статьей Export-Csv: Путь PowerShell к обработке файлов CSV как полноправных граждан.
Вы также легко можете экспортировать результаты в CSV с помощью командлета Get-AdGroupMember
.
Экспорт в Excel
PowerShell не имеет встроенного способа экспорта информации в Excel. Но всегда можно загрузить бесплатный модуль сообщества под названием ImportExcel. Этот модуль добавляет возможность экспорта похожего на CSV напрямую в листы Excel. Чтобы установить модуль PowerShell, выполните Install-Module ImportExcel -Scope CurrentUser
.
Используя указанный выше пример, вместо файла CSV, если вам нужно экспортировать группы в лист Excel, вы бы использовали командлет Export-Excel
, как показано ниже.
Найдите утечки и небезопасные пароли в вашем активном каталоге, проверив их по списку паролей NCSC.
Модуль ImportExcel обладает множеством функционала для работы с Excel. Если вам нужен более продвинутый лист, вероятно, у него есть функция для вас.
Для получения дополнительной информации о использовании модуля ImportExcel читайте эту статью. Она предоставляет отличное введение в некоторые типичные сценарии использования, с которыми он справляется.
Управляйте и отчетность в Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Скачайте бесплатную пробную версию!
Заключение
С использованием всего двух команд PowerShell вы можете сделать практически все с группами AD. Эта статья была всего лишь введением в функционал, доступный вам. Используйте здесь собранное знание, следуйте некоторым ссылкам для более глубокого погружения в тему в статье и посмотрите, что вы можете построить!