Как вы думаете, сколько есть способов получить список контроллеров домена? Давайте посчитаем. Для примера возьмет тестовый домен с оригинальным именем TEST.LOCAL, в котором есть один контроллер домена с еще более оригинальным 🙂 именем DC-TEST.
Первый способ, которым я обычно пользуюсь — утилита командной строки Netdom. Для получения списка контроллеров домена воспользуемся командой:
Netdom query DC
Второй пойдет утилита Nltest. Выведем список контроллеров командой:
Nltest /dclist:test.local
Способ третий — утилита DSQUERY, специально предназначенная для поиска объектов в Active Directory. Найти контроллеры домена с ее помощью можно так:
DSQUERY server -o rdn
или так:
DSQUERY server
Перейдем к PowerShell. Поименно вывести контроллеры домена можно командой:
Get-ADDomainController -Filter * | select Name
Переходим к нестандартным методам поиска. Выведем список контроллеров с помощью утилиты Nslookup. Каждый контроллер домена регистрирует в DNS запись SRV вида _ldap._tcp.dc._msdcs.domain.com, по которой его и можно найти. Для поиск по DNS воспользуемся командой:
Nslookup -type=all _ldap._tcp.dc._msdcs.test.local
С помощью WMI в Windows можно сделать практически все, в том числе и получить список контроллеров домена. Для этого нам потребуется класс Win32_NTDomain, в котором помимо прочего хранятся имена контроллеров домена. Получить их можно из командной строки:
wmic NTDOMAIN GET DomainControllerName
или из PowerShell:
Get-WmiObject -Class win32_NTDomain | ft -a DomainControllerName
Ну и последний из известных мне способов. Все домен контроллеры являются членами группы «Domain Controllers», и для их получения остается только вывести список членов этой группы. Сделать это можно из командной строки:
net group "Domain Controllers" /domain
или из PowerShell:
Get-ADGroupMember -Identity "Domain Controllers" | select Name
Всего получается семь способов. Если знаете еще, пишите.
Пару замечаний.
1. Вместо «Netdom query DC» лучше использовать «netdom query /domain:test.local dc», она выдаст DC с нужного домена.
2. Запрос «Nslookup -type=all _ldap._tcp.dc._msdcs.test.local» не нужен, так как он возвращает из общей DNS зоны все DC по лесу. Если хочется искать через DNS, то для этого есть команда «nltest /dnsgetdc:test.local». Легко запоминается, удобный вывод, поиск DC по доменам и сайтам. К тому же именно её выполняет компьютер когда ищет любые DC и DC своего сайта.