Проверка контроллера домена на ошибки

Active Directory это надежный, но в то же время крайне сложный и критичный сервис, от работоспособности которого зависит работа всей вашей сети. Системный администратор должен постоянно мониторить корректность работы Active Directory. В этой статье мы рассмотрим основные методики, позволяющие вам быстро проверить и диагностировать состояние вашего домена Active Directory, контроллеров домена и репликации.

Содержание:

  • Проверка состояния контроллеров домена с помощью Dcdiag
  • Проверка ошибок репликации между контроллерами домена 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;
  • И т.д.

dcdiag проверка состояния контроллера домена active directory

Полное описание всех доступных тестов есть здесь.

Помимо стандартных тестов, которые выполняются по-умолчанию, можно выполнить дополнительные проверки контроллера домена:

  • 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

dcdiag проверка службы DNS в домене

В результате должна появится сводная таблица по проверкам разрешения имен службой DNS на всех контроллерах (если все ОК, везде должно быть Pass). Если где-то будет указано Fail, нужно выполнить проверку этого теста на указанном DC:

dcdiag.exe /s:DC01 /test:dns /DnsForwarders /v

Чтобы получить расширенную информацию по результатам тестов контроллера домена и сохранить ее в текстовый файл, используйте команду:

dcdiag /s:DC01 /v >> c:\ps\dc01_dcdiag_test.log

расширенная диагностика состояния контроллера домена командой dcdiag

Следующая команда PowerShell позволяет вывести только информацию о выполненных тестах:

Dcdiag /s:DC01 | select-string -pattern '\. (.*) \b(passed|failed)\b test (.*)'

powershell скрипт - вывести информацию о тестах контроллера домена

Чтобы получить состояние всех контроллеров домена, используйте:

dcdiag.exe /s:winitpro.ru /a

Если нужно вывести только найденные ошибки, используйте параметр /q:

dcdiag.exe /s:dc01 /q

dcdiag вывести только ошибки

В моем примере утилита обнаружила ошибки репликации:

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

repadmin /replsum проверка репликации в домене

Утилита вернула текущий статус репликации между всеми DC. В идеальном случае значение largest delta не должно превышать 1 час (зависит от топологии и настроек частоты межсайтовых репликаций), а количество ошибок = 0. В моем примере видно, что одна из последних репликаций заняла 14 дней, но сейчас все OK.

Чтобы выполнить проверку для всех DC в домене:

repadmin /replsum *

Проверку межсайтовой репликции можно выполнить так:

repadmin /showism

Для просмотра топологии репликации и найденных ошибках, выполните:

repadmin /showrepl

Данная команда проверит DC и вернет время последней успешной репликации для каждого раздела каталога (last attempt xxxx was successful).

repadmin /showrepl проверка последней успешной репликации между контроллерами домена

Для вывода расширенной информации, используйте:

repadmin /showrepl *

Для запуска репликации паролей с обычного контроллера домена на контроллер домена на чтение (RODC) используется ключ /rodcpwdrepl.

Опция /replicate позволяет запустить немедленную репликацию указанного раздела каталога на определенный DC.

Для запуска синхронизации указанного DC со всеми партнерами по репликации, используйте команду

replmon /syncall <nameDC>

Для просмотра очереди репликации:

repadmin /queue

В идеальном случае очередь должна быть пуста:

repadmin /queue - очередь репликации

Проверьте время создания последней резервной копии текущего контроллера домена:

Repadmin /showbackup *

Вы также можете проверить состояние репликации с помощью PowerShell. Например, следующая команда выведет все обнаруженные ошибки репликации в таблицу Out-GridView:

Get-ADReplicationPartnerMetadata -Target * -Partition * | Select-Object Server,Partition,Partner,ConsecutiveReplicationFailures,LastReplicationSuccess,LastRepicationResult | Out-GridView

проверка репликации с помощью Get-ADReplicationPartnerMetadata

Можете дополнительно с помощью 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

проверка служб ADDS на контроллере домена

Итак, в этой статье мы рассмотрели базовые команды и скрипты, которые можно использовать для диагностики состояния вашего домена Active Directory. Вы можете использовать их во всех поддерживаемых версия Windows Server, в том числе на контроллерах домена в режиме Server Core.

Active Directory это довольно сложная система, даже если ваш домен состоит из двух контроллеров доменов в одном сайте AD. Администратор домена должен уметь быстро проверить состояние контроллеров домена, наличие проблем репликации и исправить найденые проблемы. В этой статье мы рассмотрим типовые команды, которые можно использовать для проверки состояния домена Active Directory и поиска возможных ошибок.

DCDiag – важная утилита для проверки состояния контроллеров домена. Войдите на любой контроллер домена, запустить командную строку и выполните команду:

dcdiag /e /v /q

Это общий тест состояния контроллеров домена и Active Directory. В данном отчете буду указаны только ошибки, которые требует внимание администратора домена.

dcdiag проверка состояния контроллера домена

Затем нужно проверить здоровье DNS серверов (я запускаю эти команды в консоли PowerShell):

DCDiag /Test:DNS /e /v /s:msk-dc01.test.com >c:\PS\DcdiagDNStest.txt

Затем откройте полученный отчет:

Notepad c:\PS\DcdiagDNStest.txt

Если со службой DNS нет проблем, то в разделе “Summary of DNS test results” везде должно быть указано PASS.

DNS тест контроллеров домена

Если в отчете есть ошибки, нужно исправить их вручную. Если вручную исправить ошибки DNS не удается, попробуйте исправить их автоматически командой dcdiag с параметром fix:

DCDiag /Test:DNS /e /v /s:msk-dc01.test.com /fix

Затем на всех всех контроллерах домена выполните команду:

ipconfig /registerdns

После проверки контроллеров домена и DNS службы нужно проверить состояние репликации Active Directory.

Войдите на любой DC и выполните проверку репликации командой:

repadmin /replsum

Если наибольшее из значений largest delta для любого DC не превышает 1 часа и replication fails = 0, значит в вашем домене нет проблем репликации

проверка состояния репликации в AD repadmin /replsum

Утилиты dcdiag и repadmin доступны на любом DC с ролью ADDS. Если вы хотите использовать эти утилиты в десктопной Windows 10, нужно установить RSAT.

Если вы обнаружили ошибки репликации, можно получить подробную информацию о них командой:

repadmin /showreps

Данная команда покажет какой контекст наименования не реплицируется в AD.

Следующая команда используется для быстрой проверки репликации на конкретном сервере. Если нужно проверить репликацию на всех DCs, используйте параметр wildcard (может занять длительное время)

repadmin /replsummary [DCname|wildcard]

Проверьте USN записи:

repadmin /showutdvec

Если нужно принудительно синхронизировать конкретный контроллер домена с другими участниками репликации, выполните команду:

replmon /syncall msk-dc01

Далее обязательно проверьте синхронизацию времени на контроллерах домена командой:

w32tm /monitor

NTP offset должен быть около 0 для всех DC. Если нет, вам нужно схему проверить синхронизацию времени в вашем домене Active Directory.

w32tm /monitor проверка синхронизации временм в active directory

Проверьте, что на всех контроллерах домена есть расшаренные сетевые папки SYSVOL и Netlogon. Эти папки нужны для применения и репликации групповых политик (объектов GPO).

Список общих папок на DC можно вывести командой:

net share

каталоги SYSVOL и Netlogon на контоллере домена

Теперь проверьте корректность работы Netlogons в Active Directory:

dcdiag /test:netlogons

Если с Netlogon все в порядке для всех тестов должно быть указано passed test.

dcdiag /test:netlogons

Осталось проверить на любом компьютере домена, что к нему применятся все назначенные политики. Для этого используется команда:

gpresult

Время на прочтение
8 мин

Количество просмотров 169K

Авторское примечание: Статья в первую очередь написана для начинающих системных администраторов, опытные вряд ли почерпнут для себя здесь что-нибудь новое и полезное. Навеяно статьей про GPUPDATE /force (спасибо mrHobbY).

Active Directory – это большой и сложный организм (даже если он состоит и двух контроллеров домена и одного сайта), и для системного администратора очень важно в любой момент времени провести диагностику для анализа работы этого организма.
Ну, а так как по оснасткам ходить и смотреть малоэффективно, по логам системы тоже не всегда поймешь, что происходит, поэтому на помощь приходят различные утилиты. Одна из них – dcdiag от компании Microsoft.
Посмотрим на нее внимательно – ибо полезность данной утилиты трудно переоценить. Я не буду приводить многочисленные ключи данной команды – про них при желании можно и в справке прочитать — а остановлюсь только на тех, – которые использую сам при диагностике на практике.

Первое, что нужно сделать, чтобы работать с этой утилитой – это установить ее к себе на рабочую станцию или на сам сервер (тут каждый волен выбирать сам, но в последних версиях dcdiag – уже в помощи написано, что проверки необходимо запускать на самих серверах — контроллерах домена, за исключением тестов dcPromo и RegisterInDNS). Для Windows 2003 необходимо установить пакет Support Tools c дистрибутива операционной системы, для Windows 7 и 8 – необходимо установить пакет Remote System Administration Tools (они разные для win7, win7sp1, и win8 – будьте внимательны, когда будете скачивать). Кстати, RSAT — сам по себе полезный продукт – внутри много утилит, которые просто необходимы в повседневной жизни администратора домена.
После установки пакета команда уже доступна из командной строки.
Но не торопитесь запускать ее сразу, на рабочей станции ничего не получится без указания контроллера домена, к которому надо подключиться. Утилита выдаст соответствующее предупреждение:

Примечание: начиная с Windows 7 сообщения dcdiag переведены на русский. До этого – все только на английском. Может будет кому полезно. Хотя и в старых версиях очень простой и понятный английский язык.

Замечательно – мы выяснили – что желательно указать контроллер домена с помощью ключа /s: или контекст именования – /n:. Какой сервер указывать понятно – тот контроллер домена, который вы хотите проверить – а вот если указать контекст именования домена – (имя домена другими словами – можно указывать в форматах Netbios, DNS или DN.), то будет найден ближайший (в пределах сайта) контроллер домена (далее КД).
Проведем самую простую проверку: dcdiag /s:dc01-local
И опять беда, хотя кое-что уже видно:

Результат работы

dcdiag /s:dc01-local.local

Диагностика сервера каталогов

Выполнение начальной настройки:
   * Идентифицирован лес AD.
   Сбор начальных данных завершен.

Выполнение обязательных начальных проверок

   Сервер проверки: Local\dc01-local
      Запуск проверки: Connectivity
         ......................... DC01-LOCAL - пройдена проверка Connectivity

Выполнение основных проверок

   Сервер проверки: Local\dc01-local
      Запуск проверки: Advertising
         ......................... DC01-LOCAL - пройдена проверка Advertising
      Запуск проверки: FrsEvent
         Ошибка 5 при открытии File Replication Service журнала событий
         \\DC01-LOCAL:File Replication Service:
          Отказано в доступе.
         ......................... DC01-LOCAL - не пройдена проверка FrsEvent
      Запуск проверки: DFSREvent
         ......................... DC01-LOCAL - пройдена проверка DFSREvent
      Запуск проверки: SysVolCheck
         ......................... DC01-LOCAL - не пройдена проверка SysVolCheck
      Запуск проверки: KccEvent
         Ошибка 5 при открытии Directory Service журнала событий
         \\DC01-LOCAL:Directory Service:
          Отказано в доступе.
         ......................... DC01-LOCAL - не пройдена проверка KccEvent
      Запуск проверки: KnowsOfRoleHolders
         ......................... DC01-LOCAL - пройдена проверка
         KnowsOfRoleHolders
      Запуск проверки: MachineAccount
         ......................... DC01-LOCAL - пройдена проверка MachineAccount
      Запуск проверки: NCSecDesc
         ......................... DC01-LOCAL - пройдена проверка NCSecDesc
      Запуск проверки: NetLogons
         [DC01-LOCAL] В учетных данных пользователя отсутствует разрешение на
         выполнение данной операции.
         Учетная запись, используемая для этой проверки, должна иметь права на
         вход в сеть
         для домена данного компьютера.
         ......................... DC01-LOCAL - не пройдена проверка NetLogons
      Запуск проверки: ObjectsReplicated
         ......................... DC01-LOCAL - пройдена проверка
         ObjectsReplicated
      Запуск проверки: Replications
         [Проверка репликации,DC01-LOCAL] Сбой функции
         DsReplicaGetInfo(PENDING_OPS, NULL), ошибка 0x2105
         "Доступ к репликации отвергнут."
         ......................... DC01-LOCAL - не пройдена проверка Replications
      Запуск проверки: RidManager
         ......................... DC01-LOCAL - пройдена проверка RidManager
      Запуск проверки: Services
         Не удалось открыть диспетчер управления службой в
         dc01-local.local, ошибка 0x5 "Отказано в доступе."
         ......................... DC01-LOCAL - не пройдена проверка Services
      Запуск проверки: SystemLog
         Ошибка 5 при открытии System журнала событий \\DC01-LOCAL:System:
          Отказано в доступе.
         ......................... DC01-LOCAL - не пройдена проверка SystemLog
      Запуск проверки: VerifyReferences
         ......................... DC01-LOCAL - пройдена проверка VerifyReferences


   Выполнение проверок разделов на: Schema
      Запуск проверки: CheckSDRefDom
         ......................... Schema - пройдена проверка CheckSDRefDom
      Запуск проверки: CrossRefValidation
         ......................... Schema - пройдена проверка
         CrossRefValidation

   Выполнение проверок разделов на: Configuration
      Запуск проверки: CheckSDRefDom
         ......................... Configuration - пройдена проверка
         CheckSDRefDom
      Запуск проверки: CrossRefValidation
         ......................... Configuration - пройдена проверка
         CrossRefValidation

   Выполнение проверок разделов на: LOCAL
      Запуск проверки: CheckSDRefDom
         ......................... LOCAL - пройдена проверка CheckSDRefDom
      Запуск проверки: CrossRefValidation
         ......................... LOCAL - пройдена проверка
         CrossRefValidation

   Выполнение проверок предприятия на: LOCAL.local
      Запуск проверки: LocatorCheck
         ......................... LOCAL.local - пройдена
         проверка LocatorCheck
      Запуск проверки: Intersite
         ......................... LOCAL.local - пройдена
         проверка Intersite

Как мы видим, часть тестов пройдена – но части отказано в доступе. Это из-за того, что dcdiag я запускал из-под обычной учетной записи домена, без администраторских прав. Понятно – что часть проверок пройти под ней просто невозможно. Поэтому, что бы получить правильную диагностику, необходимо запускать утилиту с административными полномочиями – либо запустить командную строку от имени администратора, либо использовать ключи /u: имя домена\имя пользователя и /p: пароль. Попробуем:
dcdiag /s:dc01-local /u:local\user19 /p:Password

Результат работы

Диагностика сервера каталогов

Выполнение начальной настройки:
   * Идентифицирован лес AD.
   Сбор начальных данных завершен.

Выполнение обязательных начальных проверок

   Сервер проверки: Magadan\DC01-LOCAL
      Запуск проверки: Connectivity
         ......................... DC01-LOCAL - пройдена проверка Connectivity

Выполнение основных проверок

   Сервер проверки: Magadan\DC01-LOCAL
      Запуск проверки: Advertising
         ......................... DC01-LOCAL - пройдена проверка Advertising
      Запуск проверки: FrsEvent
         ......................... DC01-LOCAL - пройдена проверка FrsEvent
      Запуск проверки: DFSREvent
         ......................... DC01-LOCAL - пройдена проверка DFSREvent
      Запуск проверки: SysVolCheck
         ......................... DC01-LOCAL - пройдена проверка SysVolCheck
      Запуск проверки: KccEvent
         ......................... DC01-LOCAL - пройдена проверка KccEvent
      Запуск проверки: KnowsOfRoleHolders
         ......................... DC01-LOCAL - пройдена проверка
         KnowsOfRoleHolders
      Запуск проверки: MachineAccount
         ......................... DC01-LOCAL - пройдена проверка MachineAccount
      Запуск проверки: NCSecDesc
         ......................... DC01-LOCAL - пройдена проверка NCSecDesc
      Запуск проверки: NetLogons
         ......................... DC01-LOCAL - пройдена проверка NetLogons
      Запуск проверки: ObjectsReplicated
         ......................... DC01-LOCAL - пройдена проверка
         ObjectsReplicated
      Запуск проверки: Replications
         ......................... DC01-LOCAL - пройдена проверка Replications
      Запуск проверки: RidManager
         ......................... DC01-LOCAL - пройдена проверка RidManager
      Запуск проверки: Services
            Недопустимый тип службы: RpcSs на DC01-LOCAL, текущее значение -
            WIN32_OWN_PROCESS, ожидаемое значение - WIN32_SHARE_PROCESS
         ......................... DC01-LOCAL - не пройдена проверка Services
      Запуск проверки: SystemLog
         ......................... DC01-LOCAL - пройдена проверка SystemLog
      Запуск проверки: VerifyReferences
         ......................... DC01-LOCAL - пройдена проверка VerifyReferences


   Выполнение проверок разделов на: Schema
      Запуск проверки: CheckSDRefDom
         ......................... Schema - пройдена проверка CheckSDRefDom
      Запуск проверки: CrossRefValidation
         ......................... Schema - пройдена проверка
         CrossRefValidation

   Выполнение проверок разделов на: Configuration
      Запуск проверки: CheckSDRefDom
         ......................... Configuration - пройдена проверка
         CheckSDRefDom
      Запуск проверки: CrossRefValidation
         ......................... Configuration - пройдена проверка
         CrossRefValidation

   Выполнение проверок разделов на: LOCAL
      Запуск проверки: CheckSDRefDom
         ......................... LOCAL - пройдена проверка CheckSDRefDom
      Запуск проверки: CrossRefValidation
         ......................... LOCAL - пройдена проверка
         CrossRefValidation

   Выполнение проверок предприятия на: LOCAL.Local
      Запуск проверки: LocatorCheck
         ......................... LOCAL.Local - пройдена
         проверка LocatorCheck
      Запуск проверки: Intersite
         ......................... LOCAL.Local - пройдена
         проверка Intersite

ак видим, проверки пройдены почти все – кроме проверки Services. Но тут у меня есть вполне логичное объяснение – я с помощью новой утилиты (из пакета для windows 7) пытаюсь проверять контроллер домена на базе win2003 – и вполне возможно, название службы может отличаться.


Лирическое отступление №1. При подготовке статьи я столкнулся с

epic fail

забавным феноменом, может в комментариях обсудим? :). В общем, запуская dcdiag из-под обычной учетной записи другого домена (связанного доверительными отношениями с исследуемым доменом local) и задавая параметры /u и /p – (имя пользователя и пароль административной учетной записи домена local) – утилита выдавала ошибки в части проверок — например sysvolchek (в версии dcdiag 2003 – frssysvol). Если же на рабочую станцию зайти под учетной записью с административными полномочиями в домене local — проверки прекрасно проходятся. Так что – может быть, все-таки не лишним будет проводить проверку на самом сервере. Конец лирического отступления №1.


Полностью описывать результаты работы команды я не вижу смысла. Это прекрасно описано в помощи к утилите (dcdiag /h). Видно главное – с данным контроллером домена проблем нет и все тесты пройдены. Но из проверки одного сервера – не следует факт, что AD сейчас находится в

шоколаде

работоспособном состоянии. И вот здесь нам на помощь придет ключ для проверки всех серверов предприятия.
Это ключ /e. Данный ключ заставляет утилиту обойти все КД в домене с запуском всех тестов на каждом сервере. Полезно вместе с этим применить /v – вывод расширенной информации по каждому тесту. Ну и чтобы проанализировать все это – полезно данные вывести в файл – причем лог отдельно, сообщения об ошибках – отдельно. Помогут в этом ключи /f: имя_файла_лога и ferr:/имя_файла_лога_ошибок (в новых версиях ключ /ferr убран). Если вы хотите провести проверку не того домена, в котором находитесь сейчас – добавите ключ для указания наименования контекста /n:.

Полностью команда выглядит так:
dcdiag /n:local /e /v /f:c:\logs\adtest.log /ferr:c:\logs\aderrors.log /u:local\user19 /p:Password

Внимание! В версиях dcdiag, начиная с windows 2008 ключ /ferr: убран из поддерживаемых (специально повторился :)).
Если у вас сложная структура леса, да еще и с медленными каналами связи приготовьтесь подождать. Да даже и если несложная – скажем у меня в одном реальном лесе – 10 КД, 5 сайтов и каналы 256 кбит/сек. Выполнение данной команды занимает в среднем до 20 минут.
Результат исполнения очень рекомендуется внимательно просмотреть на наличие проблем. Ну и очень желательно запускать данную утилиту регулярно для диагностики здоровья AD.
Для хардкора можно еще добавить ключ /fix – внесение безопасных исправлений, но бездумно все-таки этого делать не стоит.

Вот собственно и все что я хотел сегодня рассказать. А как часто вам приходится пользоваться данной утилитой на производстве? Какие альтернативы вы знаете?

update 1: Что-то вспомнилось, опять же из личного опыта: если у вас большой домен, связанный небыстрыми (например, спутниковыми) каналами связи — утилита будет выдавать массу ошибок в случае ее отсутствия — чаще всего, что недоступен RPC. Это нормально, и про это надо знать. Если большинство тестов оканчивается подобным сообщением — значит нет связи, необходимо применять меры по устранению сбоя. Вторая часто распространенная проблема — ошибки в DNS — но это тема уже для отдельной статьи.
p.s. к update 1 -dcdiag /fix — в том числе регистрирует по новой записи в dns службы netlogon — это тоже бывает полезно знать!

Active Directory is a reliable, but complex and critical service, and the operability of the whole enterprise network depends on it. A system administrator should constantly check if Active Directory works correctly. In this article, we will go over the main methods of how to check and diagnose the health of your Active Directory domain, domain controllers, and replication.

Contents:

  • How to Check AD Domain Controller Health Using Dcdiag?
  • Checking Active Directory Replication Errors Between DCs

How to Check AD Domain Controller Health Using Dcdiag?

Dcdiag is a basic built-in tool to check Active Directory domain controller health. To quickly check the state of an AD domain controller, use the command below:

dcdiag /s:DC01

The command runs different tests against the specified domain controller and returns a state for each test (Passed/Failed).

Typical tests:

  • Connectivity – checks if the DC is registered in DNS, establishes test LDAP and RPC connections;
  • Advertising – checks roles and services published on the DC;
  • FRSEvent – checks if there are any errors of file replication service (SYSVOL replication errors);
  • FSMOCheck – checks if the DC can connect to KDC, PDC, and Global Catalog server;
  • MachineAccount — checks if the DC account is registered in AD correctly and if the domain trust relationship is correct;
  • NetLogons – checks the logon privileges to allow replication to proceed;
  • Replications – checks the state of replication between domain controllers and if there are any errors;
  • KnowsOfRoleHolders – checks the availability of the domain controllers with FSMO roles;
  • Services – checks if services on the domain controllers are running;
  • Systemlog – checks if there are any errors in the DC logs;
  • Etc.

Testing AD domain controllers health using dcdiag.exe

You can find a full description of all available dcdiag tests here.

Besides default tests, you can run additional domain controller checks:

  • Topology – checks if KCC has generated full topology for all DCs
  • CheckSecurityError
  • CutoffServers – finds a DC that is not replicated since its partner is unavailable
  • DNS – 6 DNS checks are available (/DnsBasic, /DnsForwarders, /DnsDelegation, /DnsDymanicUpdate, /DnsRecordRegistration, /DnsResolveExtName)
  • OutboundSecureChannels
  • VerifyReplicas – checks if the application partitions are replicated correctly
  • VerifyEnterpriseReferences

For example, to check if DNS is working correctly on all domain controllers, use the following command:

dcdiag.exe /s:DC01 /test:dns /e /v

dcdiag dns tests

It will result in a summary table showing test results on how DNS resolves names on all DCs (if it is OK, you will see Pass in every cell). If you see Fail, you need to run this test against the specified DC:

dcdiag.exe /s:DC01 /test:dns /DnsForwarders /v

To get more information from domain controller test results and save it to a text file, use this command:

dcdiag /s:DC01 /v >> c:\ps\dc01_dcdiag_test.log

dcdiag log file

The following PowerShell command displays only a summary information on the performed dcdiag tests:

Dcdiag /s:DC01 | select-string -pattern '\. (.*) \b(passed|failed)\b test (.*)'

Dcdiag summary report powershell script

To get the state of all domain controllers, use:

dcdiag.exe /s:woshub.com /a

If you want to display only the errors you have found, use the /q option:

dcdiag.exe /s:dc01 /q

dcdiag failed test

In my example, the tool has detected some replication errors:

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

To make dcdiag automatically fix the Service Principal Names errors for the DC account, use the /fix option:

dcdiag.exe /s:dc01 /fix

Checking Active Directory Replication Errors Between DCs

The built-in repadmin tool is used to check replication in the Active Directory domain.

Here is the basic command to check AD replication:

repadmin /replsum

repadmin /replsummary - checking active directory replication

The tool has returned the current replication status between all DCs. Ideally, the largest delta value should be less than 1 hour (depends on the AD topology and intersite replication frequency settings), and the number of errors = 0. In my example, you can see that one of the latest replication took 14 days, but now it is OK.

To check replication for all DCs in the domain:

repadmin /replsum *

To test intersite replication:

repadmin /showism

To view the replication topology and errors (if any), run this command:

repadmin /showrepl

The command will check the DCs and return the time and date of the last successful replication for each directory partition (last attempt xxxx was successful).

Repadmin /showrepl - replication status. show when the domain controller last attempted to perform inbound replication of Active Directory

To display additional replication info, use this command:

repadmin /showrepl *

To run password replication from a writable domain controller to a read-only domain controller (RODC), the /rodcpwdrepl option is used.

The /replicate option starts the replication of the specified directory partition to a specific DC immediately.

To synchronize a specified DC with all its replication partners, use the command below:

replmon /syncall <nameDC>

To view the replication queue:

repadmin /queue

Ideally, the replication queue should be empty.

Monitoring AD replication queues (repadmin /queue)

Check when the latest backup of the current domain controller was created:

Repadmin /showbackup *

You can also check the replication state using PowerShell. For example, the following command will display all replication errors it finds in the Out-GridView table:

Get-ADReplicationPartnerMetadata -Target * -Partition * | Select-Object Server,Partition,Partner,ConsecutiveReplicationFailures,LastReplicationSuccess,LastRepicationResult | Out-GridView

Get-ADReplicationPartnerMetadata shows an replication partner metadata object for each of its replication partners (domain controllers)

You can also check the state of ADDS basic services on a domain controller using the Get-Service cmdlet:

  • Active Directory Domain Services (ntds)
  • Active Directory Web Services (adws) – all cmdlets from the AD PowerShell module connect to this service
  • DNS (dnscache and dns)
  • Kerberos Key Distribution Center (kdc)
  • Windows Time Service (w32time)
  • NetLogon (netlogon)

Get-Service -name ntds,adws,dns,dnscache,kdc,w32time,netlogon -ComputerName dc01

get adds services states on a domain controller

So, in this article, we have shown basic tools, commands, and PowerShell scripts you can use to diagnose the health of your Active Directory domain. You can use them in all supported Windows Server versions, including the domain controllers running in the Server Core mode.

In this tutorial, I’ll show you how to use the Dcdiag command line utility to perform a domain controller health Check and test DNS.

I’ll also show you a GUI tool that lets you check the health of multiple domain controllers at once.

Be sure to check the examples section below and I’ll show you the output of a normal domain controller and one that has issues.

Table of contents:

  • What is Dcdiag
  • How to install Dcdiag
  • Check Active Directory Health Using Dcdiag
  • Automate AD Health Check (Email Report)
  • Active Directory Diagnostic Tests

Let’s dive right in.

What is Dcdiag

Dcdiag is a Microsoft Windows command line utility that can analyze the state of domain controllers in a forest or enterprise. You can choose to analyze a single domain controller or all DC’s in a forest.

You might be thinking, how well does a command line utility really do at testing and finding issues with domain controllers?

Well, it actually does a pretty good job! I was surprised to find out how many different tests this command actually did.

I counted a total of 30 different tests, and some tests had multiple tests.

So what does Dcdiag actually do? What kinds of tests does it perform?

You can view a list of tests in the command help menu,  run dcdiag /? to see the help menu.

I’ll have to admit the descriptions from the help command are not that helpful. I came across a good blog post by Ned Pyle called What does DCDiag actually do that explains each test in more details. If you are interested in learning exactly what the Dcdiag command does then I recommend you read that post.

How to install Dcdiag

If you want to run Dcdiag or use the Active Directory Health Check tool you will need to install the RSAT tools.

There is a really good chance that you already have the Dcdiag tool installed.

If you have the AD DS role installed then Dcdiag is already installed.

If you have the Remote Server Administration Tools (RSAT) tools installed then you already have Dcdiag installed.

Check Active Directory Health Using Dcdiag (examples)

DCDiag is very easy to use.

There are several different command line switches that can be used with Dcdiag, to view them all just use this command dcdiag /?

Here is an overview of the switches I’ll be using in the examples below.

/s: dcname switch is used to run Dcdiag against a remote server

/v: switch prints more detailed information about each test

/c: switch means comprehensive, this will run all tests including the dns test.

/q: switch will only print errors. This is useful as dcdiag can display a lot of information, if you want to see just the errors then use this switch.

/f: switch is used to redirect the results to a file.

TIP: When running dcdiag it will probably report some errors but this doesn’t necessarily mean you have issues with your domain controllers.  For example, the command will query the system logs on the DC and display errors logs, but they could be errors from a computer or another server. Again this may not be a DC issue. You will just have to review and determine if it’s related or not.

Video Tutorial

If you don’t like video tutorials or want more details, then continue reading the instructions below.

Example 1: Use /s to run against a remote server

This will run all the DC tests against the remote server DC1.

dcdiag /s:DC1

To run this on a local server just leave off the /s:servername

Example 2: Using /v to display more details

The verbose switch will display additional details. It does the same tests as the first example it just displays more details about each test.

dcdiag /s:DC1  /v

Example 3: Using /f to save to a log file

By using the /f you can save the results to a text file.  This is great for logging the results and reviewing them at a later time.

dcdiag /s:DC1 /f:c:\it\dcdiag_test.txt

Example 4: Using /a to run against all domain controllers

If you have multiple domain controllers and want to test them all at once, then use this command.  If you have many domain controllers this will be a lot of information displayed, this is where using the /f option would come in handy.

dcdiag /s:DC1 /a

Example 5: Use /q to only display the errors

DCDiag can display a lot of information, to remove the noise and only display the errors use this command.

dcdiag /s:DC1 /q

Example 6: Use multiple switches (My favorite)

Here are the commands I like to run. It will run all tests, displays all the details, and outputs its to a file.

dcdiag /s:DC1 /c /v /f:c:\it\dcdiag_test.txt

Now that you know how to test your domain controllers I’ll move on to testing DNS. By the way, if you use the last example that includes the /c that switch will run all tests including DNS.

How to test DNS with DCDiag

The DNS diagnostics also includes several tests.

Here are the tests that are performed, by default all tests except external name resolution run.

/DnsBasic (basic tests, can’t be skipped)
/DnsForwarders (forwarders and root hints tests)
/DnsDelegation (delegations tests)
/DnsDynamicUpdate (dynamic update tests)
/DnsRecordRegistration (records registration tests)
/DnsResolveExtName (external name resolution test)
/DnsAll (includes all tests above)
/DnsInternetName: <internet name> (for test /DnsResolveExtName)

Use the following command to run a DNS test

dcdiag /s:dc1 /test:dns

Example: Dcdiag results from a normal domain controller

Directory Server Diagnosis
Performing initial setup:
* Identified AD Forest.
Done gathering initial info.

Doing initial required tests

Testing server: Default-First-Site-Name\DC1
Starting test: Connectivity
......................... DC1 passed test Connectivity

Doing primary tests

Testing server: Default-First-Site-Name\DC1
Starting test: Advertising
......................... DC1 passed test Advertising
Starting test: FrsEvent
......................... DC1 passed test FrsEvent
Starting test: DFSREvent
......................... DC1 passed test DFSREvent
Starting test: SysVolCheck
......................... DC1 passed test SysVolCheck
Starting test: KccEvent
......................... DC1 passed test KccEvent
Starting test: KnowsOfRoleHolders
......................... DC1 passed test KnowsOfRoleHolders
Starting test: MachineAccount
......................... DC1 passed test MachineAccount
Starting test: NCSecDesc
......................... DC1 passed test NCSecDesc
Starting test: NetLogons
......................... DC1 passed test NetLogons
Starting test: ObjectsReplicated
......................... DC1 passed test ObjectsReplicated
Starting test: Replications
......................... DC1 passed test Replications
Starting test: RidManager
......................... DC1 passed test RidManager
Starting test: Services
......................... DC1 passed test Services
Starting test: SystemLog ......................... DC1 passed test SystemLog Starting test: VerifyReferences
......................... DC1 passed test VerifyReferences

Running partition tests on : ForestDnsZones
Starting test: CheckSDRefDom
......................... ForestDnsZones passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... ForestDnsZones passed test CrossRefValidation

Running partition tests on : DomainDnsZones
Starting test: CheckSDRefDom
......................... DomainDnsZones passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... DomainDnsZones passed test CrossRefValidation

Running partition tests on : Schema
Starting test: CheckSDRefDom
......................... Schema passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... Schema passed test CrossRefValidation

Running partition tests on : Configuration
Starting test: CheckSDRefDom
......................... Configuration passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... Configuration passed test CrossRefValidation

Running partition tests on : ad
Starting test: CheckSDRefDom
......................... ad passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... ad passed test CrossRefValidation

Running enterprise tests on : ad.activedirectorypro.com
Starting test: LocatorCheck
......................... ad.activedirectorypro.com passed test LocatorCheck
Starting test: Intersite
......................... ad.activedirectorypro.com passed test Intersite

Example: Failed kdc service and NETLOGON Service

Here is the dcdiag output when the kdc and NETLOGON service is stopped. I used the /q switch to only display the errors

C:\Users\rallen>dcdiag /s:dc2 /q
 Fatal Error:DsGetDcName (DC2) call failed, error 1717
 The Locator could not find the server.
 ......................... DC2 failed test Advertising
 kdc Service is stopped on [DC2]
 NETLOGON Service is stopped on [DC2]
 ......................... DC2 failed test Services
 Warning: DcGetDcName(GC_SERVER_REQUIRED) call failed, error 1717
 A Global Catalog Server could not be located - All GC's are down.
 Warning: DcGetDcName(PDC_REQUIRED) call failed, error 1717
 A Primary Domain Controller could not be located.
 The server holding the PDC role is down.
 Warning: DcGetDcName(TIME_SERVER) call failed, error 1717
 A Time Server could not be located.
 The server holding the PDC role is down.
 Warning: DcGetDcName(GOOD_TIME_SERVER_PREFERRED) call failed, error 1717
 A Good Time Server could not be located.
 Warning: DcGetDcName(KDC_REQUIRED) call failed, error 1717
 A KDC could not be located - All the KDCs are down.
 ......................... ad.activedirectorypro.com failed test LocatorCheck

That’s it.

Easy right?

DCDiag is a simple yet very powerful tool to check and diagnose domain controllers. I highly recommend that you become familiar with this tool and run it in your environment from time to time.

The Active Directory Health Check tool creates easy to read health reports on your domain controllers. l makes it very easy to check the health of multiple domain controllers at once.

The GUI tool has the following benefits:

  • Easily check Active Directory health on multiple domain controllers
  • Quickly see why a test failed by clicking on a test
  • Gets important events from the Windows event logs (errors, warnings, critical errors)
  • Export and schedule automated reports

This tool can also get the critical events from your domain controllers. This makes it easy to review the logs and quickly spot potential issues.

You can download a free trial of this GUI health monitoring tool by clicking the button below.

Automate checking the health of your domain controllers by using the built-in scheduler. Schedule the report to run daily, weekly, or once a month (I recommend daily).

Понравилась статья? Поделить с друзьями:
  • Проверка компа на ошибки через командную строку
  • Проверка компа на ошибки программа скачать
  • Проверка коллимационной ошибки теодолита
  • Проверка кода на синтаксические ошибки html
  • Проверка кода на ошибку питон