Active Directory это надежный, но в то же время крайне сложный и критичный сервис, от работоспособности которого зависит работа всей вашей сети. Системный администратор должен постоянно мониторить корректность работы Active Directory. В этой статье мы рассмотрим основные методики, позволяющие вам быстро проверить и диагностировать состояние вашего домена Active Directory, контроллеров домена и репликации.
Проверка состояния контроллеров домена с помощью Dcdiag
Базовая встроенная утилита для проверки состояния контролеров домена – dcdiag.
Чтобы быстро проверить состояние конкретного контроллера домена 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
Если нужно вывести только найденные ошибки, используйте параметр /q:
dcdiag.exe /s:dc01 /q
В моем примере утилита обнаружила ошибки репликации:
There are warning or error events within the last 24 hours after the SYSVOL has been shared. Failing SYSVOL replication problems may cause Group Policy problems. ......................... DC01 failed test DFSREvent
Чтобы утилита dcdiag попробовала автоматически исправить ошибки в Service Principal Names для данной учетной записи DC, используйте параметр /fix:
dcdiag.exe /s:dc01 /fix
Проверка ошибок репликации между контроллерами домена Active Directory
Для проверки репликации в домене используется встроенная утилита repadmin.
Базовая команда проверки репликации:
repadmin /replsum
Утилита вернула текущий статус репликации между всеми DC. В идеальном случае значение largest delta не должно превышать 1 час (зависит от топологии и настроек частоты межсайтовых репликаций), а количество ошибок = 0. В моем примере видно, что одна из последних репликаций заняла 14 дней, но сейчас все OK.
Чтобы выполнить проверку для всех DC в домене:
repadmin /replsum *
Проверку межсайтовой репликции можно выполнить так:
repadmin /showism
Для просмотра топологии репликации и найденных ошибках, выполните:
repadmin /showrepl
Данная команда проверит DC и вернет время последней успешной репликации для каждого раздела каталога (last attempt xxxx was successful).
repadmin /showrepl *
Для запуска репликации паролей с обычного контроллера домена на контроллер домена на чтение (RODC) используется ключ /rodcpwdrepl.
Опция /replicate позволяет запустить немедленную репликацию указанного раздела каталога на определенный DC.
Для запуска синхронизации указанного DC со всеми партнерами по репликации, используйте команду
replmon /syncall <nameDC>
Для просмотра очереди репликации:
repadmin /queue
В идеальном случае очередь должна быть пуста:
Проверьте время создания последней резервной копии текущего контроллера домена:
Repadmin /showbackup *
Вы также можете проверить состояние репликации с помощью PowerShell. Например, следующая команда выведет все обнаруженные ошибки репликации в таблицу 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
Можете дополнительно с помощью 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 -ComputerName dc03
Итак, в этой статье мы рассмотрели базовые команды и скрипты, которые можно использовать для диагностики состояния вашего домена 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