омен Active Directory может содержать в себе сотни и даже тысячи учетных записей и для управления всеми этими аккаунтами администратору требуется значительное количество времени. Даже, если у нас уже все аккаунты разнесены по группам, ко всем группам применены политики и настроены права доступа, все равно могут возникнуть ситуации, когда по тем или иным причинам нам необходимо найти полную информацию о пользователе.

Для решения этих задач нам может помочь PowerShell, инструмент, который помимо прочего, позволяет легко проводить аудит учетных записей пользователей Active Directory.  Для этих целей мы будем использовать один из самых популярных командлетов Active Directory PowerShell - Get-ADUser. С помощью этого командлета мы можем получить как указанный пользовательский объект, так и выполнить настраиваемый поиск для получения нескольких пользовательских объектов.

У вас есть несколько вариантов того, как идентифицировать пользователя: можно использовать Distinguished Name (DN), Globally Unified Identifier (GUID), идентификатор безопасности (SID) или имя учетной записи Security Account Manager (SAM). О том, как можно использовать эти варианты на практике мы поговорим чуть дальше, а пока нам надо подготовить нашу инфраструктуру PowerShell для работы с Active Directory. 

Для начала работы с AD нам необходимо установить модуль Active Directory. Сделать это можно двумя способами. Прежде всего, можно установить Remote Server Administration Tools (RSAT). Сделать это можно следующим образом: нажать Start, далее Settings, затем выбрать Apps и Optional Features, после этого добавить компонент с помощью Add и в открывшемся списке выбрать RSAT: Active Directory Domain Services and Lightweight Directory Services Tools option. Для завершения установки нажать Install.

Второй способ установки RSAT еще проще. Мы можем воспользоваться функционалом самого PowerShell для установки непосредственно с узла Windows Update.

 Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

Приступим к поискам

Для поиска данных о пользователях в AD мы будем использовать параметр -Identity. Откроем модуль Active Directory Module for Windows Powershell в режиме Администратора.

Для начала поищем пользователя по его атрибуту sAMAccountName

Get-ADUser  Имя_Пользователя

В результате выполнения команды мы получили значения основных полей из AD для данного пользователя. Но мы можем также поискать пользователя по другим параметрам. Например, предположим, что нам известно только значение поля objectGUID (или GUID). В таком случае команда будет иметь следующий вид:

Get-ADUser идентификатор_GUID

Еще один довольно распространенный случай, когда нам известно только значение SID и необходимо узнать, кто скрывается под этим значением. В таком случае мы также используем GetADUser с указанием SID:

Get-ADUser идентификатор_SID

 

Когда объектов слишком много

Представленная выше команда Get-ADUser удобна при работе в небольших средах, благодаря простоте использования. Но если в вашем домене десятки тысяч объектов, то Get-ADUser может создать заметную нагрузку на домен контроллер, с которым вы взаимодействуете при выполнении данного командлета. Дело в том, что Get-ADUser извлекает все пользовательские объекты в вашем подключенном домене AD.

Чтобы избежать подобной ситуации нам необходимо отфильтровать всю базу пользователей и выполнить поиск конкретных пользователей на основе некоторых свойств. Для решения этой задачи предназначен параметр ‘-filter’, указывающий строку запроса, которая извлекает объекты AD. В этой строке используется синтаксис PowerShell Expression Language (EL). Синтаксис PEL обеспечивает расширенную поддержку преобразования типов для типов значений, получаемых параметром Filter. Синтаксис использует представление по порядку, что означает, что оператор помещается между операндом и значением. Давайте рассмотрим несколько примеров, чтобы получить лучшее представление.

Для начала поищем все аккаунты, которые имеют статус Enabled:

Get-ADUser -filter {Enabled -eq "true"}

Здесь после параметра filter мы в фигурных скобках указываем то логическое выражение, по которому должна осуществляться фильтрация. В данном случае мы получим все активные аккаунты в домене. Если мы к примеру, хотели бы получить список всех пользователей, у которых заполнено поле E-Mail, наш запрос имел бы следующий вид:

Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail

Результаты работы команды мы передаем на вход команде ft (Format Table) которая переводит вывод в более читаемый вид.

Таким образом, вы можете использовать -Filter для поиска по другим полям объектов Active Directory.

Еще один пример - это поиск конкретного пользователя по заданному шаблону. Здесь мы найдем все записи, где вхождение такого шаблона используется в имени или фамилии пользователя.

Get-ADUser -Filter {name -like "*John*"} -Properties * | ft Name,EmailAddress

 Давайте еще сократим нагрузку на нашу инфраструктуру AD ограничив поиск только по определенным Organizational Unit (OU). Для этого воспользуемся параметром -SearchBase.

Get-ADUser -SearchBase 'OU="Test Users",DC=domain,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress

В этом примере мы выводим имена и почтовые адреса пользователей, ограничивая область действия запроса только OU “Test Users”.

По умолчанию GetADUser возвращает десять основных полей, которые мы уже видели ранее, однако мы можем изменить вывод этой команды, указав с помощью ключа Properties те поля, которые нас интересуют. Например, если нам необходимо узнать, когда пользователи в последний раз меняли свои пароли, то это можно сделать с помощью следующей команды:

Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet

Еще один полезный пример использования -Properties это получение списка пользователей со временем создания их аккаунтов.

Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated

Заключение

В этой статье мы рассмотрели полезные на практике примеры работы с Active Directory с помощью PowerShell. В следующей статье мы поговорим о том, как PowerShell может помочь при анализе журналов событий.

Также хочу пригласить вас на бесплатный урок: "Написание скриптов на PowerShell и их использование", который пройдет уже в понедельник.

Комментарии (2)


  1. SvoboniiLogin
    01.07.2023 09:38

    Аж целая статья про Get-ADUser и его опции, серьезно?


  1. Kodzo
    01.07.2023 09:38
    -1

    Прям человек очень хочет на хабр, что ни неделя то статья по первой ссылке гугла)