Get-ADDomainController: получение информации о контроллерах домена через PowerShell
Вы можете использовать командлет PowerShell Get-ADDomainController для получения информации о контроллерах домена в Active Directory. Этот командлет является частью модуля Active Directory для Windows PowerShell, который может быть установлен как на Windows Server, так и на рабочих станциях Windows. Подробности смотрите в статье «Как установить и использовать Модуль Active Directory для Windows PowerShell».
Командлет Get-ADDomainController
Get-ADDomainController выводит информацию об одном или нескольких контроллеров домена Active Directory на основе критериев обнаруживаемых служб, параметров поиска или путём предоставления идентификатора контроллера домена, например имени NetBIOS.
Командлет Get-ADDomainController получает контроллеры домена, указанные в параметрах. Вы можете получить контроллеры домена, используя опции -Identity, -Filter или -Discover.
При запуске Get-ADDomainController без каких-либо параметров командлет отображает информацию о текущем контроллере домена (LogonServer), используемом этим компьютером для проверки подлинности (контроллер домена выбирается в соответствии с топологией IP-подсети сайта AD):
Get-ADDomainController
Командлет вернул все поля с информацией о контроллере домена, доступной в базе данных Active Directory.
ComputerObjectDN : CN=HACKWARE-SERVER,OU=Domain Controllers,DC=ds,DC=hackware,DC=ru DefaultPartition : DC=ds,DC=hackware,DC=ru Domain : ds.hackware.ru Enabled : True Forest : ds.hackware.ru HostName : HackWare-Server-2022.ds.hackware.ru InvocationId : bf704d68-01ea-4e3d-83fe-6f556ca09e14 IPv4Address : 192.168.1.60 IPv6Address : fd28:62f2:dde3:0:4def:bfd5:11ad:1fe2 IsGlobalCatalog : True IsReadOnly : False LdapPort : 389 Name : HACKWARE-SERVER NTDSSettingsObjectDN : CN=NTDS Settings,CN=HACKWARE-SERVER,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ds,DC=hackware,DC=ru OperatingSystem : Windows Server 2022 Standard OperatingSystemHotfix : OperatingSystemServicePack : OperatingSystemVersion : 10.0 (20348) OperationMasterRoles : {SchemaMaster, DomainNamingMaster, PDCEmulator, RIDMaster…} Partitions : {DC=ForestDnsZones,DC=ds,DC=hackware,DC=ru, DC=DomainDnsZones,DC=ds,DC=hackware,DC=ru, CN=Schema,CN=Configuration,DC=ds,DC=hackware,DC=ru, CN=Configuration,DC=ds,DC=hackware,DC=ru…} ServerObjectDN : CN=HACKWARE-SERVER,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ds,DC=hackware,DC=ru ServerObjectGuid : 1eb9f6f2-1fcd-446f-a0db-80b356e27673 Site : Default-First-Site-Name SslPort : 636
Примеры использования Get-ADDomainController
Чтобы получить контроллер домена с помощью механизма обнаружения DCLocator, используйте опцию -Discover. Вы можете указать критерии поиска, задав такие опции, как -Service, -SiteName, -DomainName, -NextClosestSite, -AvoidSelf и -ForceDiscover.
Также вы можете найти контроллер домена, которому должен принадлежать ваш компьютер, через службу -DCLocator:
Get-ADDomainController -Discover
Следующая команда получит один доступный контроллер домена на указанном сайте:
Get-ADDomainController -Discover -Site "Default-First-Site-Name"
Опция -ForceDiscover указывает командлету очистить всю кэшированную информацию о контроллере домена и выполнить новое обнаружение. Если этот параметр не указан, командлет может возвращать кэшированные сведения о контроллере домена.
Get-ADDomainController -Discover -Site "Default-First-Site-Name" -ForceDiscover
Эта команда получает один доступный контроллер указанного домена в данном домене с помощью обнаружения.
Get-ADDomainController -Discover -Domain "user01.com"
Вы можете найти ближайший доступный контроллер домена с активной ролью веб-служб AD:
Get-ADDomainController -ForceDiscover -Discover -Service ADWS
Опция -Service задаёт типы получаемых контроллеров домена. Вы можете указать более одного типа, используя список, разделённый запятыми. Допустимые значения для этого параметра:
- PrimaryDC или 1
- GlobalCatalog или 2
- KDC или 3
- TimeService или 4
- ReliableTimeService или 5
- ADWS или 6
Пример использования опции -Service для поиска PDC (Primary Domain Controller Emulator) в вашем домене:
Get-ADDomainController -Discover -Service PrimaryDC
Эта команда ищет компьютер с функцией Глобального каталога в текущем лесу:
Get-ADDomainController -Discover -Service "GlobalCatalog"
Эта команда получает основной контроллер домена с помощью обнаружения и проверяет, используется ли он в качестве сервера времени.
Get-ADDomainController -Discover -Domain "corp.contoso.com" -Service "PrimaryDC","TimeService"
Если ваш контроллер домена не найден или не отвечает, вы можете найти его на ближайшем сайте AD (определяется весом межсайтовых ссылок):
Get-ADDomainController -Discover -ForceDiscover -NextClosestSite
Чтобы найти и получить более одного контроллера домена, используйте опцию -Filter.
Чтобы отобразить список всех контроллеров домена в текущем домене, выполните такую команду:
Get-ADDomainController -Filter * | Format-Table
Используя следующую команду, вы можете подсчитать количество контроллеров домена в AD:
Get-ADDomainController -Filter * | Measure-Object
Вы можете отобразить более удобную таблицу, в которой показаны все контроллеры домена, их имена хостов, IP-адреса, версии ОС и имена сайтов AD:
Get-ADDomainController -Filter *| Select-Object Name,ipv4Address,OperatingSystem,site | Sort-Object name
Если вы хотите получить некоторую информацию о DC из другого домена, укажите имя любого доступного DC в другом домене с помощью параметра -Server (это возможно в случае включения доверительных отношений между доменами).
Get-ADDomainController -Filter * -Server dc01.test.com | Select Name,ipv4Address, IsGlobalCatalog,Site
Использование Get-ADDomainController для поиска контроллеров домена по определенным критериям
Давайте рассмотрим несколько полезных команд, которые вы можете использовать для получения списка контроллеров домена в AD по определенным критериям.
Опция -Identity указывает контроллер домена, который нужно получить. Вы можете идентифицировать контроллер домена по его GUID, IPV4Address, глобальному IPV6Address или имени узла DNS.
Чтобы найти контроллер домена по его IP-адресу:
Get-ADDomainController -Identity "192.168.100.6"
Эта команда получает контроллер домена, используя его NetBIOS имя.
Get-ADDomainController -Identity "PDC-01"
Эта команда получает контроллер домена, используя его имя хоста DNS, в домене, указанном параметром -Site, указанным в параметре -Server, и с указанием учётных данных администратора.
Get-ADDomainController -Identity "TK5-CORP-DC-10.user01.com" -Server "user01.com" -Credential "corp\administrator"
Чтобы найти все контроллеры домена, в именах которых есть DC02:
Get-ADDomainController -Filter {name -like "*dc02*"} | Select Name,ipv4Address,OperatingSystem,site
Чтобы отобразить список контроллеров домена на сайтах, имена которых начинаются с «Mun*»:
Get-ADDomainController -Filter {site -like "Mun*"} | Select Name,ipv4Address,OperatingSystem,site
Чтобы отобразить список всех контроллеров домена только для чтения (RODC):
Get-ADDomainController -Filter {IsReadOnly -eq $true} | Select-Object Name,ipv4Address,OperatingSystem,site
Чтобы найти контроллеры домена на сайте «Rome» с включённой ролью глобального каталога:
Get-ADDomainController -Filter {site -eq "Rome" -and IsGlobalCatalog -eq $true} | Select-Object Name,ipv4Address,OperatingSystem,site
Скрипт PowerShell для проверки доступности всех контроллеров домена
Следующий скрипт PowerShell позволяет поочерёдно проверять контроллеры домена и выполнять для каждого из них определённые действия:
$DCs = Get-ADDomainController -Filter * ForEach-Object($DC in $DCs) { действия }
Вот пример простого скрипта PowerShell, который проверяет доступность порта LDAPS (TCP 636) на каждом контроллере домена в вашем домене с помощью командлета Test-NetConnection. Если порт LDAPS недоступен, появится предупреждение.
$DCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address,isGlobalCatalog,Site,Forest,OperatingSystem ForEach($DC in $DCs) { $PortResult=Test-NetConnection -ComputerName $DC.Hostname -Port 636 -InformationLevel Quiet if ($PortResult -ne "$True"){ write-host $DC.Hostname " не доступен" -BackgroundColor Red -ForegroundColor White }else { write-host $DC.Hostname " доступен" -BackgroundColor Green -ForegroundColor White} }
Получился простой скрипт для отслеживания доступности всех контроллеров домена в вашем домене.
Также существуют разные сценарии для проверки всех контроллеров домена по очереди.
Связанные статьи:
- Как установить Active Directory Domain Services с помощью PowerShell (100%)
- Как установить и использовать Модуль Active Directory для Windows PowerShell (100%)
- Как настроить Windows Server 2022 с помощью PowerShell (50%)
- Управление ролями и функциями Windows Server с помощью PowerShell (50%)
- Аналог Add-Computer в PowerShell 7 (50%)
- Снижение уровня контроллеров домена в Windows Server в PowerShell и графическом интерфейсе (RANDOM - 50%)