Командир Get-ADDomainController можна використовувати для отримання інформації про контролерах домену в Active Directory. Даний командлет входить до складу модуля Active Directory для PowerShell і вимагає установки окремого компонента RSAT (в Windows 10 1809 і вище RSAT встановлюється по-новому).
Командлет Get-ADDomainController
При запуску Get-ADDomainController
без параметрів командлет виводить інформацію про поточний контролері домену (LogonServer), який використовується комп’ютером для аутентифікації (DC вибирається при завантаженні відповідно до топології сайтів AD).
Командлет повернув все поля з інформацією про контроллер домена, доступною в AD.
ComputerObjectDN : CN=mskDC01,OU=Domain Controllers,DC=corp,DC=winitpro,DC=ru DefaultPartition : DC=corp,DC=winitpro,DC=ru Domain : corp.winitpro.ru Enabled : True Forest : winitpro.ru HostName : mskDC01.corp.winitpro.ru InvocationId : 96234a-7fc6-4a32-9e62-3b32343ab4ad IPv4Address : 10.1.10.6 IPv6Address : IsGlobalCatalog : True IsReadOnly : False LdapPort : 389 Name : mskDC01 NTDSSettingsObjectDN : CN=NTDS Settings,CN=mskDC01,CN=Servers,CN=MskCenter,CN=Sites,CN=Configuration,DC=winitpro,DC =ru OperatingSystem : Windows Server 2008 R2 Standard OperatingSystemHotfix : OperatingSystemServicePack : Service Pack 1 OperatingSystemVersion : 6.1 (7601) OperationMasterRoles : {} Partitions : {DC=ForestDnsZones,DC=winitpro,DC=ru, DC=DomainDnsZones,DC=corp,DC=winitpro,DC=ru, CN=Schema,CN=Configuration,DC=winitpro,DC=ru...} ServerObjectDN : CN=mskDC01,CN=Servers,CN=MskCenter,CN=Sites,CN=Configuration,DC=winitpro,DC=ru ServerObjectGuid : 8052323-e294-4430-a326-9553234431d6 Site : MskCenter SslPort : 636
Також ви можете знайти контролер домену, до якого повинен відноситься ваш комп’ютер через механізм DCLocator:
Get-ADDomainController –Discover
Ви можете знайти найближчий доступний DC з активною роллю AD Web Services:
Get-ADDomainController –ForceDiscover -Discover -Service ADWS
Параметр Service можна використовувати, щоб знайти PDC в домені:
Get-ADDomainController -Discover -Service PrimaryDC
Якщо ваш контролер домену не знайдено або не відповідає, ви можете знайти контролер домену в найближчому сайті AD (визначається за вагою міжсайтових зв’язків):
Get-ADDomainController –Discover –ForceDiscover -NextClosestSite
Щоб вивести список все контролерів домену в поточному домені, виконайте:
Get-ADDomainController -Filter * | ft
Порахувати кількість контролерів домену в AD можна за допомогою команди:
Get-ADDomainController -Filter * | Measure-Object
Виведемо більш зручну таблицю, в якій вказані всі контролери домену з їх ім’ям, IP адресою, версією ОС і ім’ям сайту AD:
Get-ADDomainController -Filter *| Select Name, ipv4Address, OperatingSystem, site | Sort-Object name
Якщо вам потрібно отримати інформацію про DC з іншого домену, потрібно вказати ім’я будь-якого доступного DC в сторонньому домені за допомогою параметра –Сервер (Можливо при наявності довірчих відносин між доменами).
Get-ADDomainController -Filter * -server dc01.contoso.cpm | Select Name, ipv4Address, IsGlobalCatalog, Site
Використовуємо Get-ADDomainController для вибірки контролерів домену за умовами
Розглянемо кілька корисних командлетів, які можна використовувати для отримання списку контролерів домену в AD за певними критеріями.
Знайти контролер домену по його IP адресою:
Get-ADDomainController -Identity "10.1.1.120"
Знайти всі DC, в імені яких є символи DC04:
Get-ADDomainController -Filter { name -like "*dc04*"} | Select Name, ipv4Address, OperatingSystem, site
Пошук всіх доступних DC в певному сайті:
Get-ADDomainController -Discover -ForceDiscover -Site "Site-Name"
Вивести список DC в сайтах, імена яких починаються з Mos *:
Get-ADDomainController -Filter {site -like "Mos*"} | Select Name, ipv4Address, OperatingSystem, site
Вивести список всіх Read Only контролерів домену:
Get-ADDomainController -Filter { IsReadOnly -eq $true} | Select Name, ipv4Address, OperatingSystem, site
Знайти DC в сайті “Site Name”, на яких включена роль Global Catalog:
Get-ADDomainController -Filter {site -eq "Site Name" -and IsGlobalCatalog -eq $true} | Select Name, ipv4Address, OperatingSystem, site
PowerShell скрипт перевірки доступності всіх контролерів домену
Наступна конструкція дозволяє перебрати всі контролери домену в Active Directory і виконати для кожного з них певним чином впливати:
$AllDCs = Get-ADDomainController -Filter *
ForEach($DC in $AllDCs)
{
do something
}
Нижче наведено приклад простого PowerShell скрипта, який перевіряє доступність LDAPS порту (TCP 636) на кожному DC в домені за допомогою командлета Test-NetConnection. Якщо LDAPS порт на DC не доступний, з’являється попередження.
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address,isGlobalCatalog,Site,Forest,OperatingSystem
ForEach($DC in $AllDCs)
{
$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 " доступен" }
}
Вийшов простий скрипт моніторингу доступності DC. Їсть ще різні сценарії перебору всіх DC в домені. У попередніх статтях ми вже показували, як використовувати Get-ADDomainController для пошуку певної події в журналах на всіх контролерів домену. Наприклад, для: пошуку події блокування облікового запису користувача, пошуку подій NTLMv1 аутентифікації, пошуку подій доданні в групу AD і т.д.