Поиск по сайту:

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


Контроллеры домена являются важной частью вашей сети. Они позволяют организовать вашу сеть и управлять вашими пользователями, компьютерами и другими ресурсами. Поэтому важно регулярно проверять состояние ваших контроллеров домена. Но как это сделать и на какие сигналы необходимо обращать внимание?

Особенно когда у вас работает несколько контроллеров домена, важно следить за репликацией между контроллерами домена.

В этой статье я объясню, как вы можете проверить состояние контроллеров домена, и я написал скрипт, который автоматически проверяет состояние всех ваших контроллеров домена.

Проверьте состояние контроллера домена

Контроллеры домена являются основой вашей сети. Любая проблема с контроллером домена может привести к ситуации, когда пользователи больше не могут войти в систему, и это не лучший способ начать день. Для выявления любых потенциальных проблем нам необходимо регулярно проверять состояние наших контроллеров домена.

Ваши серверы Windows оснащены несколькими встроенными инструментами, которые позволяют проверять работоспособность ваших контроллеров домена и Active Directory. Самым важным из них является инструмент DCDiag, который проверит ваши серверы по 21 пункту с использованием теста по умолчанию.

Чтобы проверить репликацию между вашими контроллерами домена, вы можете использовать инструмент RepAdmin. Этот инструмент позволяет вам быстро проверить, работает ли репликация без каких-либо ошибок. (Вы также можете протестировать репликацию с помощью DCDiag, но RepAdmin предоставляет больше информации)

Если вы будете регулярно использовать эти два инструмента, то сможете быстро выявлять потенциальные проблемы.

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

Итак, я создал скрипт PowerShell, который будет проверять работоспособность всех ваших контроллеров домена и Active Directory. Он выполнит все важные тесты, включая DCDiag, и красиво оформит результаты в консоли, или вы можете экспортировать их в файл HTML и отправить по электронной почте.

Скрипт проверяет следующие важные части:

  • DNS – Настроены ли правильно записи DNS и адреса DNS-серверов
  • Задержка – Проверьте задержку каждого контроллера домена
  • Время безотказной работы – Чтение обновлений контроллера домена
  • Домен Роли –Проверьте, доступен ли каждый держатель FSMO
  • Свободное пространство – Проверьте свободное пространство на системном диске
  • Размер базы данных AD – Читает размер базы данных AD
  • Услуги – Проверьте, работают ли все важные услуги (13)
  • DCDiag – Запускает стандартные тесты DCDiag
  • Репликация - Проверяет последнюю попытку репликации, её успешность и разницу
  • Смещение времени NTP – Проверяет, не слишком ли велико смещение NTP

Проверка DNS

Одним из первых тестов, которые мы проводим в скрипте, является проверка настроек DNS. Мы хотим убедиться, что записи DNS для каждого контроллера домена зарегистрированы в DNS.

Мы также хотим убедиться, что DNS-серверы в сетевом адаптере настроены правильно.

Задержка

Тест ping не только проверит, доступен ли сервер, но также выдаст предупреждение, если задержка слишком высока. Задержка в локальной сети должна быть ниже 10 мс, но когда у вас есть несколько контроллеров домена на разных сайтах, тогда задержка приемлема, если она ниже 100 мс.

Время безотказной работы

Время безотказной работы более информативно, но оно будет показывать предупреждение, когда сервер работает менее 12 часов.

Роли домена

Чтобы поддерживать информацию в вашем Active Directory в синхронизации на всех контроллерах домена, существует 5 ролей FSMO. Для каждой роли есть только один мастер. В большинстве случаев все роли выполняет один контроллер домена. Но в некоторых случаях вы можете разделить роли между несколькими контроллерами домена.

Важно, чтобы сервер для каждой из этих ролей был доступен. В скрипте мы проверяем, есть ли у контроллеров домена одна или несколько ролей, и проверяем, можем ли мы достучаться до сервера для других ролей. Когда один из них отключен, в экспорте будет показано оповещение.

Услуги

Контроллер домена требует для работы несколько служб. Теперь они также проверяются по умолчанию с помощью теста DCDiag. Однако для отчетности удобнее проверять службы отдельно, чтобы мы могли легко показать службы, которые не работают.

Следующие услуги проверяются:

  • Службы Active Directory
  • АД Веб-сервисы
  • Репликация DFS
  • Клиент DHCP
  • Клиент DNS
  • DNS сервер
  • Межсетевое сообщение
  • Центр распределения ключей Kerberos
  • Нетлогон
  • Удалённый вызов процедуры
  • Сервер (Lanmanserver)
  • Менеджер учетных записей безопасности
  • Рабочая станция (Lanmanworkstation)
  • Журнал событий Windows
  • Время Windows, рабочая станция

DCDiag

Скрипт выполнит стандартные тесты DCDiag, за исключением тестов служб. Если один из проверок не пройдет, будет указано, какой из тестов не удался.

Репликация

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

  • Последняя попытка репликации
  • Последняя успешная репликация
  • Дельта репликации

Отчет также покажет партнера по репликации сервера.

Смещение времени

Последнее, что мы собираемся проверить, это разницу во времени между серверами. Она должна быть в пределах плюс-минус одной секунды. Если смещение больше, то могут возникнуть проблемы с репликацией на других контроллерах домена или проблемы с аутентификацией в вашей сети.

Скрипт проверки здоровья контроллера домена

Скрипт PowerShell для проверки работоспособности ваших контроллеров домена позволяет вам легко и регулярно проверять состояние вашей Active Directory и серверов. Вы можете запланировать выполнение скрипта раз в неделю и сохранять результаты в HTML-файл. Или вы можете запустить скрипт вручную и просмотреть результаты непосредственно в консоли.

Вы можете скачать последнюю версию скрипта здесь из моего репозитория на GitHub.

В начале скрипта вы найдете пару настроек, которые можете задать. К ним относятся имя файла и его местоположение, а также желаемый формат вывода.

Set variables
$reportDate = Get-Date -Format "dd-MM-yyyy"
$reportFileName = "LazyDCHealthCheck-$reportDate.html"
$reportPath = "c:\"
$outputToConsole = $true
$outputToHtml = $false

Вам потребуется запустить скрипт на контроллере домена. Использование PSSession не работает, потому что это приведет к ошибкам, когда скрипты попытаются подключиться к другим контроллерам домена.

Когда вы запускаете скрипт с выводом в консоль, вы получите результат, подобный приведенному ниже (надеюсь, с меньшим количеством ошибок 😉). Количество ошибок в конце скрипта подсчитывает все ошибки DCDiag как одну, поэтому вы видите только две ошибки в сводке в приведенном ниже примере.

Мы также можем экспортировать результаты здоровья контроллера домена в HTML. Вы можете сделать это в двух форматах, в зависимости от количества контроллеров домена в вашей сети. Если у вас есть только один или два контроллера домена, то каждый контроллер будет перечислен вертикально, что облегчает просмотр результатов в электронной почте, например.

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

Около строки 551 в скрипте вы найдете приведенное ниже условие. Это условие определяет, получите ли вы горизонтальную или вертикальную таблицу. Вы можете изменить это число, если предпочитаете горизонтальную или вертикальную таблицу.

if ($allDomainControllers.length -gt 2) {

Завершение

Важно регулярно проверять состояние вашего контроллера домена, чтобы заранее выявлять возможные проблемы. Этот скрипт проверяет самые важные части вашего сервера и Active Directory, а также позволяет легко просматривать результаты в консоли PowerShell или в HTML-отчете.

Убедитесь, что вы ознакомились с этой статьей, чтобы узнать больше о планировании задач PowerShell.

Если у вас есть предложения по сценариям или вы нашли какие-либо ошибки, пожалуйста, дайте мне знать в комментариях ниже или здесь на GitHub.