Для задач поиска определенных объектов в Active Directory доступны несколько встроенных инструментов, включая графически оснастки, а также утилиты командной строки и командлеты PowerShell. В этой статье мы рассмотрим, как выполнить поиск различных типов объектов в домене Active Directory (пользователей, компьютеров, групп, организационных подразделений) с помощью простых и более сложных LDAP фильтров, включая поиск по определенной маске (шаблону) или сразу по нескольким критериям.
Задача поиска объектов в Active Directory (пользователей, групп или компьютеров) по имени с помощью некого шаблона, регулярного выражения или маске не так очевидна, как кажется на самом деле. Дело в том, что по-умолчанию графическая консоль ADUC (Active Directory Users and Computers), не позволяет использовать стандартный подстановочный символ звездочка (*) в начале или середине поисковой фразы.
Например, вы хотите найти в Active Directory все группы, в имени которых содержится ключевое слово «
SQL"
. Если открыть консоль поиска (Find User, Contacts, and Groups) в ADUC и выполнить обычный поиск по ключевому слову
SQL
, то результаты скорее всего вас не устроят. Консоль ADUC выведет только группы и пользователей, у которых указанное ключевое слово содержится в начале имени. Остальные объекты со словом
sql
не будут найдены. Поиск по маске
*sql*
также не даст результатов (подстановочные символы просто не работают).

rundll32.exe dsquery,OpenQueryWindow

Как найти пользователя и группу Active Directory из консоли ADUC?
Для поиска объектов в AD по определенной маске из графической консоли Active Directory Users and Computers ( dsa.msc ) можно воспользоваться простыми LDAP запросами.
- Для этого, откройте меню Find и в выпадающем списке типов поиска выберите Custom Search;
- Переключитесь на вкладку Advanced;
- В поле LDAP query, введите:
name=*sql*Примечание. Такой LDAP запрос указывает что нужно найти все объекты AD, содержащие в имени значение sql. Для этого нужно воспользоваться символом подстановки*с обеих сторон.
Как вы видите, по данному шаблону было найдено множество объектов AD (группы, компьютеры, пользователи, сервисные gMSA аккаунты).
Если нужно искать только объекты AD определенного типа, укажите его в значении
objectcategory
. Например, чтобы найти объекты типа группа, используйте такой LDAP запрос:
(&(objectcategory=group)(name=*sql*))
Если включить опцию Filter в меню View, можно воспользоваться возможностью расширенной фильтрации в консоли поиска AD.

С помощью пункта меню View -> Choose Columns вы можете добавить дополнительные атрибуты объектов AD, по которым можно фильтровать найденные объекты.
Если вы часто используете определенные запросы для поиска в Active Directory, то чтобы каждый раз не набирать LDAP запросы вручную, их можно сохранить в разделе Saved Queries (сохраненные LDAP запросы в консоли Active Directory).

Более сложный LDAP запрос – найти всех пользователей в AD, у которых не заполнен email адрес (пустое значение):
(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(!mail=*) )
Если вы используете для поиска консоль Active Directory Administrative Center (
dsac.exe
), в ней также можно использовать шаблоны LDAP для поиска. Выберите Global Search и переключитесь в режим Convert to LDAP. Введите запрос в поле LDAP query.

Поиск компьютеров в Active Directory
Для поиска компьютеров и серверов в Active Directory по точному вхождению нужно сначала в выпадающем списке Find выбрать тип объекта Computers и затем можно в поисковое поле указать имя компьютера.

Если нужно найти компьютеры в AD по маске, нужно использовать такой LDAP запрос в разделе Custom Search -> Advanced.
(&(objectcategory=computer)(name=*sql*))
Поиск объектов в Active Directory с помощью PowerShell
Для поиска объектов в AD из командной строки, можно воспользоваться модулем PowerShell для ActiveDirectory.
Для поиска в Active Directory определенного типа объекта можно использовать соответствующий командлет:
- Get-ADGroup – поиск групп
- Get-ADUser – поиск пользователей
- Get-ADComputer – поиск компьютеров
Для поиска групп в AD по шаблону, можно воспользоваться такой командой PowerShell:
Get-ADGroup -Filter {name -like "*sql*"} -Properties Description,info | Select Name,samaccountname,Description,info | Sort Name

Аналогично можно выполнить поиск по имени пользователя или компьютера. Ниже примеры двух таких команд. Дополнительно во втором команде мы добавили несколько критериев поиска и ограничили область поиска определенным организационным подразделением (OU) с помощью параметра SearchBase:
Get-ADUser -Filter {name -like "*sql*"}
Get-ADComputer 'Enabled -eq $true -and OperatingSystem -like "*Server*" -and Name -like "*sql*"' -SearchBase "OU=HQ,DC=winitpro,DC=ru"
Если вы не знаете точно какой тип объекта вы ищите, можно выполнить универсальный поиск по всем типам объектам AD, используя командлет Get-ADObject:
Get-ADObject -Filter {name -like "*sql*"} –Properties * | select sAMAccountName, ObjectClass, userPrincipalName, DisplayName, Description | FT
Как вы видите, команда вывела все типа объектов в AD (
ObjectClass
: computer, user, group, msDS-GroupManagedServiceAccount).

Выполнить поиск только среди объектов типа Контакт в домене:
Get-ADObject -Filter 'ObjectClass -eq "contact" -and Name -like "*sql*"'
Можно использовать LDAP фильтр непосредственно в команде Get-ADObject:
Get-ADObject -LdapFilter "(&(objectCategory=person)(objectClass=user)(cn=*sql*))"
Если вам нужно найти все сервисные аккаунты AD (Managed Service Account и group MSA), используйте команду:
Get-ADServiceAccount -Filter {name -like "*sql*"}
Для поиска по имени организационного подразделения используйте командлет:
Get-ADOrganizationalUnit -Filter "Name -like '*Computers*'"
Модуль Active Directory для PowerShell установлен по умолчанию на контроллерах домена, а на клиентские станции его нужно ставить отдельно. В некоторых случаях, когда вы не можете установить этот модуль на рабочую станцию, но нужно выполнить поиск (например, в PowerShell логон скрипте групповой политикик), можно воспользоваться таким синтаксисом:
$searchuser="*sql*"
([adsisearcher]"(&(objectCategory=person)(objectClass=user)(displayname=$searchuser))").FindAll() |
ForEach-Object { $_.Properties.displayname }
Надеюсь, эти простые способы облегчат вам задачу поиска объектов в Active Directory.


Добрый день!
подскажите пжт, а как в графической консоли ADUC найти пользователей у которых поле E-mail (во вкладке General) пустое (не заполненное, с пустым значением)?
а так же при этом отсеить заблокированных пользователей со статусом — Disabled account
чтобы нашёл АКТИВНЫХ пользователей с пустым значением поля е-майл адреса
LDAP запрос:
(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(!mail=*) )Ситуация:
в AD большое количество пользователей путь домен>папка домена>users
У каждого юзера во вкладке редактор атрибутов (attribute editor), далее строка «pager» указаны различные данные!
Как мне выполнить поиск сразу всех юзеров у которых в строке «pager» стоит стандартный параметр «». («»)
Чтобы узнать кому из пользователей я не добавил туда данные???
стоит стандартный параметр «». («»)
стоит стандартный параметр «не задано». («non set»)
Найти пользовтелей с пустым значением в атрибуте:
Get-ADUser -Filter {-not(pager -like "*") } -SearchBase "OU=Users,DC=domain,dc=com"Простой вопрос: как вывести просто список групп?
Get-ADGroup -filter * |select name,SamAccountName
Добрый день!
Как вывести только контакты в AD.
Очень мало информации про контакты, в основном только про пользователей.
Cделал пока так:
Get-ADObject -LDAPFilter «(objectClass=contacr)» -SearchBase ‘CN=Configuration,DC=SS64,DC=Com’ -Properties Name | Format-Table Name.
Есть у контактов свойства типо logon, чтобы ввести неиспользуемые контакты?
Все правильно, искать контаеты нунжно через LDAP фильтр или обычнм фильтром:
Get-ADObject -Filter 'objectClass -eq "contact"'
Отследить исопльзование контактов по их атрибутом конечно не удастся, они не исопльзуются для входа.
Если контакты используются для отправки писем, можно копить почтовые транспортные логи за промежуотк допустим полгода, и потом искать в логах какие контакты используются. Сравнив этот список со списом в AD, Неиспользуемые контакты можно будет удалять.
Как в поиске по компьютерам использовать поле owner? Я пробывал CN, DN владельца компьютера результат нулевой.
Поиск компьютера по DistinguishedName владельца:
получит DN:
Get-ADUser -Filter "Name -like '*ivanov*'" | Select DistinguishedNameПоиск компьютеров с указанным DN во владельце:
Get-ADComputer -Filter "managedBy -eq 'CN=Konstantin Ivanov,OU=Users,OU=HQ,DC=winitpro,DC=ru" -Properties managedBy | Select Name, managedBy, DistinguishedName