Active Directory это надежный, но в то же время критичный сервис, от работоспособности которого зависит функционирование всей вашей сети. Системный администратор должен постоянно мониторить корректность работы Active Directory. В этой статье мы рассмотрим, как быстро проверить и диагностировать состояние вашего домена Active Directory, контроллеров домена и статуса репликации с помощью встроенных утилит dcdiag, repadmin, команд PowerShell и других встроенных инструментов.
Проверка состояния контроллеров домена с помощью Dcdiag
Базовая встроенная утилита для проверки состояния контролеров домена – dcdiag (Domain Controller Diagnostic Tool). Чтобы быстро проверить состояние конкретного контроллера домена AD воспользуйтесь командой:
dcdiag /s:DC01
Данная команда выполняет различные тесты указанного контроллера домена и возвращает статус по каждому тесту (Passed| Failed).
Типовые тесты:
- Connectivity – проверяет регистрацию DC в DNS, выполняет тестовые LDAP и RPC подключения;
- Advertising – проверяет роли и сервисы, опубликованные на DC;
FRSEvent – проверяет наличие ошибок в службе репликации файлов (ошибки репликации SYSVOL); - FSMOCheck – проверяет, что DC может подключиться к KDC, PDC, серверу глобального каталога;
- MachineAccount — проверяет корректность регистрации учетной записи DC в AD, корректность доверительных отношения с доменом;
- NetLogons – проверка наличие прав на выполнение репликации;
- Replications – проверка статуса репликации между контроллерами домена и наличие ошибок;
- KnowsOfRoleHolders – проверяет доступность контроллеров домена с ролями FSMO;
- Services – проверяет, запущены ли на контроллере домена необходимые службы;
- Systemlog – проверяет наличие ошибок в журналах DC;
- И т.д.
Помимо стандартных тестов, которые выполняются по-умолчанию, можно выполнить дополнительные проверки контроллера домена:
- Topology – проверяет, что KCC сгенерировал полную топологию для всех DC;
- CheckSecurityError
- CutoffServers – находит DC, который не получает репликацию из-за того, что партнёр недоступен;
- DNS – доступны 6 проверок службы DNS (/DnsBasic, /DnsForwarders, /DnsDelegation, /DnsDymanicUpdate, /DnsRecordRegistration, /DnsResolveExtName)
- OutboundSecureChannels
- VerifyReplicas – проверяет корректность репликации разделов приложения
- VerifyEnterpriseReferences
Например, чтобы проверить корректность работы DNS на всех контроллерах домена, используйте команду:
dcdiag.exe /s:DC01 /test:dns /e /v
В результате должна появится сводная таблица по проверкам разрешения имен службой DNS на всех контроллерах (если все ОК, везде должно быть Pass). Если где-то будет указано Fail, нужно выполнить проверку этого теста на указанном DC:
dcdiag.exe /s:DC01 /test:dns /DnsForwarders /v
Получить расширенную информацию по результатам тестов контроллера домена и сохранить ее в текстовый файл:
dcdiag /s:DC01 /v >> c:\ps\dc01_dcdiag_test.log
Dcdiag /s:DC01 | select-string -pattern '\. (.*) \b(passed|failed)\b test (.*)'
Опросить состояние всех контроллеров в домене:
dcdiag.exe /s:winitpro.ru /a
Чтобы не загружать вывод dcdiag лишней информацией об успешных проверках, можно опросить состояние контроллеров домена и AD с выводом только ошибок (параметр /q), которые требуют внимания администратора:
dcdiag /q /e /v
Или ошибки для конкретного DC:
dcdiag.exe /s:dc01 /q
У команды dcdiag есть опция /fix, позволяющая исправить тривиальные ошибки в AD на конкретном DC:
dcdiag.exe /s:dc01 /fix
На всех контроллерах домена:
dcdiag /e /fix
Проверка репликации между контроллерами домена Active Directory
Для проверки состояния репликации между контроллерами в домене используется встроенная утилита repadmin. Базовая команда проверки входящей и исходящей репликации:
repadmin /replsum
Утилита вернет текущий статус репликации между всеми DC. В идеальном случае значение largest delta не должно превышать 1 час (зависит от топологии и настроек частоты межсайтовых репликаций), а количество ошибок replication fails = 0. В моем примере видно, что одна из последних репликаций заняла 14 дней, но сейчас все OK.
Чтобы выполнить проверку репликации для всех DC в домене:
repadmin /replsum *
Проверка межсайтовой репликации:
repadmin /showism
Для просмотра топологии репликации и найденных ошибках, выполните:
repadmin /showrepl
Данная команда проверит DC и вернет время последней успешной репликации для каждого раздела каталога (last attempt xxxx was successful).
repadmin /showrepl *
Для запуска репликации паролей с обычного контроллера домена на контроллер домена на чтение (RODC) используется ключ /rodcpwdrepl.
Опция /replicate позволяет запустить немедленную репликацию указанного раздела каталога на определенный DC.
Для запуска принудительной синхронизации указанного DC со всеми партнерами по репликации, используйте команду
repadmin /syncall
Если нужно принудительно заставить контроллер домена получить изменения с других DC, исопльзуется команда:
repadmin /syncall /Ade
Для просмотра очереди репликации:
replmon /syncall <nameDC>
Для просмотра очереди репликации:
repadmin /queue
В идеальном случае очередь должна быть пуста:
Проверьте время создания последней резервной копии текущего контроллера домена:
Repadmin /showbackup *
Также для проверки состояние репликации в AD доступен ряд PowerShell командлетов.
Получить список DC в домене:
Get-ADDomainController
Получить список ошибок репликации на указанных DC:
Get-ADReplicationFailure -Target DC1,DC2
Вывести ошибки репликации AD в сайте (
-Scope Site
) или домене (
-Scope Domain
):
Get-ADReplicationFailure -scope site -target HQ| FT Server, LastError, Partner-Auto
Get-ADReplicationFailure -Target winitpro.ru -Scope Domain
Получить список партнеров по репликации текущего DC:
Get-ADReplicationConnection -Filter *
Чтобы выполнить принудительную репликацию используется командлет
Sync-ADObject
.
Например, следующая команда выведет все обнаруженные ошибки репликации в таблицу Out-GridView:
Get-ADReplicationPartnerMetadata -Target * -Partition * | Select-Object Server,Partition,Partner,ConsecutiveReplicationFailures,LastReplicationSuccess,LastRepicationResult | Out-GridView
https://github.com/winadm/posh/blob/master/ActiveDirectory/CheckADHealth.ps1
Скрипт предназначен для английской версии Windows Server. Для регулярной проверки состояния DC можно добавить PowerShell скрипт в планировщик задач.
Проверка состояния других служб контроллера домена
Рассмотрим как проверить состояние других базовых служб и сервисов контроллера домена.
С помощью командлета Get-Service проверьте состояние служб на контроллере домена:
- Active Directory Domain Services (ntds)
- Active Directory Web Services (adws) – именно к этой службе подключаются все командлеты из модуля AD PowerShell
- DNS (dnscache и dns)
- Kerberos Key Distribution Center (kdc)
- Windows Time Service (w32time)
- NetLogon (netlogon)
Get-Service -name ntds,adws,dns,dnscache,kdc,w32time,netlogon
Также проверьте, что на DC опубликованы сетевые папки SYSVOL и Netlogon:
net share
Состояние инфраструктуры групповых политик на контроллерах домена можно получить из графической консоли Group Policy Management (
gpmc.msc
). Запустите GPMC, выберите корень домена и на вкладке Status нажмите кнопку Detect Now.
Будет выполнено сравнение информации о GPO в AD с информацией в каталоге SYSVOL на каждом контроллере домена.
Далее обязательно проверьте синхронизацию времени на контроллерах домена командой:
w32tm /monitor
Разница во времени PDC (основной источник времени в домене) и другими DC должна быть около 0 (NTP offset). Если нет, проверить синхронизацию времени в Active Directory.
Итак, в этой статье мы рассмотрели базовые команды и скрипты, которые можно использовать для диагностики состояния вашего домена Active Directory. Вы можете использовать их во всех поддерживаемых версия Windows Server, в том числе на контроллерах домена в режиме Server Core.
Спасибо!
После использования Вашего скрипта на гитхабе, я открываю html в браузере и он мне показывает только
The full Active Directory Replication report is available here
Active Directory Replication Problem :
No problem detected
Active Directory Replication OK :
Самой таблицы, как у вас на скриншоте, в низу нет. Проверил и в Мозилле и в хроме
Имя домена поправили?
$Domain = "test.com"
Скрипт запускали с правами администратора домена?
Домен свой прописал, и скрипт от админа отработал.
Сам файлик html сгенерировался, но при его откритии такое чувство что не все отображается
Странно, у меня этот скрипт работает нормально…
Посмотрите, формируется ли у вас список серверов командой:
$dclist = (Get-ADDomain $Domain -Server $Domain).ReplicaDirectoryServers
$dclist
Если тут ок, добавьте в скрипт вывод результатов в консоль:
$result = repadmin /showrepl $source_dc_fqdn $ad_partition
$result
Посмотрите, есть ли там данные и нет ли критичных ошибок
$dclist = (Get-ADDomain $Domain -Server $Domain).ReplicaDirectoryServers
$dclist
Здесь все ок, список контроллеров показывает
Можете сказать номер строки в скрипте, куда вставить это надо?
Добавил после 61 строки $result
Вывод в консольное окно идет, но все что русскими буквами, то в абракадабре.
Но и html файл такой же пустой, без таблички
Русские буквы….
Скрипт для английской версии Windows, пройдитесь по нему и замените проверки английских слов на русские эквиваленты:
-notlike "*successful*"
"*via RPC"
-like "*successful*"
PS. и в который раз повторяю, ну не используйте русские версии серверных продуктов 🙂
Тут дело не в сервере, а в локализации хоста на котором запускается скрипт.
почему не использовать русские версии?
Сам скрипт отрабатывает без ошибок. При открытии html только не вся информация выводится
Добавьте
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
в начале скрипта с отчётом по репликации, так будет отображаться таблица у кого стоит русская версия винды.
Для запуска синхронизации указанного DC со всеми партнерами по репликации, используйте команду
replmon /syncall
здесь repadmin нужен
+
Команда должна быть:
repadmin /syncall
Get-ADReplicationPartnerMetadata -Target * -Partition * | Select-Object Server,Partition,Partner,ConsecutiveReplicationFailures,LastReplicationSuccess,LastRepicationResult | Out-GridView
выдаёт ожидаемые ошибки
Ваш скрипт эти ошибки не учитывает? Т.к. в результате нет проблем и репликация ОК))))
Т.е. команда показывает что проблемы есть,а скрипт показывает что их нет
В скрипте по ссылке не используется Get-ADReplicationPartnerMetadat, там парсятся результаты repadmin.
Если нужно, добавьте соственную проверку результатов Get-ADReplicationPartnerMetadata.
В консоли управления доменными GPO gpmc.msc если выбрать корень домена, доступна кнопку Detect now. Там можно получить статус по репликации SYSVOL в домене и проблемные DC
У меня накрылась репликация групповых политик (SYSVOL Folder). Подскажите, пожалуйста, как решить проблему?
На русскоязычных DC для корректной работы скрипта, нужно дополнительно конвертить вывод в кодировку 1251;
function mCTE ([string]$From = "cp866", [string]$To = "windows-1251" ){
Begin{
$encFrom = [System.Text.Encoding]::GetEncoding($from)
$encTo = [System.Text.Encoding]::GetEncoding($to)
}
Process{
$bytes = $encTo.GetBytes($_)
$bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
$encTo.GetString($bytes)
}
}