Сохраненные запросы (Saved Queries) в mmc консоли Active Directory Users and Computers (ADUC) позволяют создавать различные LDAP фильтры для выборки объектов Active Directory.Такие запросы можно сохранять, редактировать и переносить между компьютерами. С помощью сохраненных запросов можно быстро и эффективно решать задачи поиска и выборки объектов в AD по различным критериям. Saved Queries помогают администратору быстро выполнять типовые задачи администрирования объектов AD: вывести список всех отключенных учетных записей в домене, выбрать всех пользователей определенной организации с ящиками на заданном сервере Exchange и т.п.
При использовании сохраненных LDAP запросов администратор может выполнять групповые операции с объектами из разных OU (контейнеров) Active Directory. Например, можно выполнить массовую блокировку/разблокировку, перемещение, удаление учетных записей, переименование и т.п. Такие запросы в консоли ADUC позволяют обойти иерархическую структуру OU в Active Directory и собрать все нужные объекты в плоском табличном виде.
Как создать сохраненный запрос в консоли Active Directory?
Рассмотрим несколько примеров использования сохраненных запросов в консоли Active Directory Users and Computers для поиска объектов. Предположим, вам нужно получить список активных (незаблокированных) учетных записей пользователей, их email адресов и названий отделов.
- Запустите консоль ADUC (dsa.msc), выберите раздел Saved Queries, щелкните по нему правой кнопкой и выберите New – > Query;
- В поле Name укажите имя сохраненного запроса, которое будет отображаться в консоли ADUC;
- В поле Query root можно выбрать контейнер (OU), в котором выполняется запрос. По умолчанию поиск выполняется по всему домену AD. В нашем примере, мы сузим область поиска, выбрав контейнер Ekaterinburg;
- Далее нажмите на кнопку Define Query, и в выпадающем списке Find выберите пункт Custom Search;
- Перейдите на вкладку Advanced и в поле Enter LDAP query скопируйте следующий LDAP-запрос (этот запрос выбирает незаблокированных пользователей, другие примеры LDAP запросов смотрите чуть ниже):
(&(objectcategory=person)(objectclass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))
- Сохраните изменения, нажав OK;
- Теперь в консоли Active Directory выберите созданный запрос, нажмите F5 для перестроения списка. В результате в правом окне появится список пользователей, который соответствует данному LDAP запросу;
- Чтобы показать в консоли Active Directory дополнительные атрибуты пользователей (email-адрес, отдел), откройте меню View -> Add/Remove Columns;
- Добавьте нужные столбцы;
- Мы добавили 3 дополнительных поля: User Logon Name, E-Mail Address, Department.
- Полученный список пользователей можно выгрузить в CSV или TXT файл для дальнейшего анализа и импорта в Excel. Для этого щелкните правой кнопкой по сохраненному запросу и выберите пункт меню Export List;
Вы можете создать и сохранить в вашей консоли ADUC множество различных сохраненных запросов, которые можно организовать в древовидную структуру. Таким образом вы может создать удобную подборку запросов, позволяющих быстро выполнять типовые задачи администрирования AD.
Также можно получать данные из AD с помощью PowerShell и сохранять их непосредственно в файл Excel.
В оснастке поддерживается несколько режимов формирования сохраненных запросов AD. Не обязательно указывать текст LDAP фильтра вручную. Выможете сформировать сфой запрос с помощью простого графического мастера. Просто выбираете различные атрибуты объектов AD и используйте для поиска по нужным критериям. Например, чтобы вывести список компьютеров с Windows Server в домене, выберите:
- Find -> Computers;
- Вкладка Advanced;
- Fields -> Operating System
- Stars with -> указываете
Windows Server *
В качестве символа подстановки используется.*
(можно указать так*Server*
). Можно добавить несколько критериев поиска.
Сохраните запрос и обновите его в консоли ADUC. В списке будут показаны все Windows Server в вашем домене.
Сохраненные запросы хранятся локально на компьютере, на котором они были созданы. Xml-файл с настройками находится здесь C:\Users\%USERNAME%\AppData\Roaming\Microsoft\MMC\DSA). Для переноса сохранённых запросов между компьютерами, в консоли dsa.msc есть функция экспорта (Export Query Definition) и импорта (Import Query Definition) запросов через XML файлы.
Полезные сохраненные LDAP запросы для MMC консоли Active Directory
В следующей табличке собраны примеры часто используемых LDAP запросов для выборки объектов Active Directory. Вы можете сохранить их в своей консоли ADUC для ежедневного использования.
Сохраненный запрос ADUC | LDAP фильтр |
Поиск групп с ключевым словом admin в имени |
(objectcategory=group)(samaccountname=*admin*)
|
Поиск учетных записей с ключевым словом service в поле description |
(objectcategory=person)(description=*service*)
|
Пустые группы Active Directory (в которых нет пользователей) |
(objectCategory=group)(!member=*)
|
Пользователи, у которых в настройках указано “Пароль никогда не истекает” |
(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536)
|
Пользователи, которые не меняли пароль более 3 месяцев |
(&(sAMAccountType=805306368)(pwdLastSet<=132161330597286610))
|
Найти пользователей, у которых в поле отдел указано “Отдел продаж”
|
(&(objectCategory=person)(objectClass=user)(department=*Отдел продаж*))
|
Пользователи с незаполненным полем Profile Path |
(objectcategory=person)(!profilepath=*)
|
Активные учетные записи пользователи, у которых истек срок действия пароля |
(objectCategory=person)(objectClass=user)(pwdLastSet=0)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)
|
Все пользователи AD, кроме отключенных |
(objectCategory=person)(objectClass=user)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)
|
Заблокированные пользователи AD |
(objectCategory=person)(objectClass=user)(useraccountcontrol:1.2.840.113556.1.4.803:=16)
|
Пользователи с email адресами |
(objectcategory=person)(mail=*)
|
Пользователи без email адресов |
(objectcategory=person)(!mail=*)
|
Пользователи, скрытые из адресной книги Exchange (GAL): |
(&(sAMAccountType=805306368)(msExchHideFromAddressLists=TRUE))
|
Список учетных записей, никогда не регистрировавшихся в домене (информацию о времени входе в домен в более удобном виде можно просматривать с помощью вкладки Additional Account Info) |
(&(objectCategory=person)(objectClass=user)(|(lastLogonTimestamp=0)(!(lastLogonTimestamp=*)))
|
Учетные записи пользователи, созданных в определенный период времени (за 2019год) |
(&(&(objectCategory=user)(whenCreated>=20190101000000.0Z&<=20200101000000.0Z&)))
|
Пользователи AD, созданные в этом году |
(&(&(&(objectClass=User)(whenCreated>=20200101000000.0Z))))
|
Все компьютеры с Windows 10 |
(&(objectCategory=computer)(operatingSystem=Windows 10*))
|
Вывести все компьютеры с определенным билдом Windows 10 (например, 1909 – это билд 18363) |
(&(&(objectCategory=computer)(operatingSystem=Windows 10*)(operatingSystemVersion=*18363*)))
|
Найти все Windows Server 2016 кроме контролеров домена |
(&(&(objectCategory=computer)(!(primaryGroupId=516)))(operatingSystem=Windows Server 2016*))
|
Все SQL серверы: |
(&(objectCategory=computer)(servicePrincipalName=MSSQLSvc*))
|
Все группы рассылки Exchange |
(&(objectCategory=group)(!groupType:1.2.840.113556.1.4.803:=2147483648))
|
Поиск Query Based Distribution Groups в домене | |
Найти объект AD с определенным SID |
(objectSID=S-1-5-21-71234583-152049171
|
Использование LDAP фильтров в PowerShell
Вы можете использовать рассмотренные LDAP фильтры для поиска объектов в консоли PowerShell. В большинстве командлетов из модуля PowerShell для Active Directory есть специальный параметре LdapFilter. В этом параметре нужно указывать код LDAP запроса.
Например,
Get-ADUser -LdapFilter "(&(objectCategory=person)(objectClass=user)(department=*Отдел продаж*))"| ft -a DisplayName,department
Командлеты
Get-ADUser
,
Get-ADComputer
,
Get-ADGroup
являются специализированными и используются для поиска объектов определенного типа – пользователей, компьютеров или групп. Если вы не знаете тип объекта AD, который вам нужен, или вам нужна информация о всех типах объектов, используйте более универсальный командлет
Get-ADObject
. Например, для поиска объекта по SID:
Get-ADObject -LdapFilter "(objectSID=S-1-5-21-71234583-15204917-8654222215-1231)" -Properties * -SearchBase “OU=MSK,DC=winitpro,DC=ru| ft -a DisplayName,Title
А можно как то выбрать пользователей с административными правами, т.е. пользователей входящих в стандартные административные группы, а так же входящие в группы, которые в свою очередь входят в стандартные административные группы и что бы это было без ограничения вложенности?
Как такой запрос реализовать в ADUC консоли — не знаю. Думаю, гораздо проще это сделать через PowerShell:
Get-ADGroupMember -identity «Domain Admins» -Recursive| select name
Огромное спасибо!
Добрый день, а подскажите, вот Корень запроса, указывается где вести поиск, а как то можно прописать этот путь руками? Сейчас просто делаю в линукс системе такой запрос и мне нужно прописать что бы он в контейнере определенном искал
У меня через LDAP тоже что-то не получается ограничить область поиска определеным OU. Так что решения не знаю…. Если найдете — поделитесь.
PS. В Windows уже несколько лет пользуюсь только командлетами Get-ADUser (https://winitpro.ru/index.php/2015/05/21/powershell-get-aduser-poluchenie-dannih-o-polzovatelyax-active-directory/), Get-ADComputer (https://winitpro.ru/index.php/2015/09/28/powershell-get-adcomputer-poluchenie-dannyx-o-kompyuterax-v-active-directory/)
У меня вышло чуть по другому, первоначально идет строка
$Self->{‘AuthSyncModule::LDAP::BaseDN’} = ‘OU=Users,OU=Murmansk,OU=MAGE,DC=pdc1,DC=mage,DC=ru’;
Где я указываю в каком контейнере все делать и только потом фильтр на не выключенных пользователей
AlwaysFilter => ‘(&(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))’,
Это настройка OTRS для связи с двумя доменами AD
Вот еще куча примеров для составления ldap запросов:
https://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx
Мне тоже требуется вывести всех пользователей за исключением одного контейнера, в котором исключительно сервисные УЗ, как сделать через ПШ знаю, но нужен ldap. Кто делал? Может поделитесь?
это всё конечно замечательно. а как сделать выгрузку всех пользователей в домене, но в структуре подразделений?? (organization unit)
Сделать LDAP запрос с фильтром по OU или воспользовться командлетом Get-ADUser https://winitpro.ru/index.php/2015/05/21/powershell-get-aduser-poluchenie-dannih-o-polzovatelyax-active-directory/
Фильтр «Список учетных записей, никогда не регистрировавшихся в домене…» не работает (is not a valid query string.)
(&(objectCategory=person)(objectClass=user)(|(lastLogonTimestamp=0)(!(lastLogonTimestamp=*)))
что здесь не так?
Действительно, там ошибка синтаксиса. Попробуйте так:
(&(objectCategory=person)(objectClass=user)(!(lastLogonTimestamp=*)))
Спасибо, работает.