Элементы проверки работоспособности групповой политики Active Directory: правильно ли настроено время?

Опубликовано: 17 Марта, 2023
Элементы проверки работоспособности групповой политики Active Directory: правильно ли настроено время?

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

Эмулятор PDC корневого домена всегда считается надежным источником времени. Вам необходимо убедиться, что все контроллеры домена Active Directory и эмулятор PDC корневого домена настроены правильно. Вот где эта статья пригодится. Мы предоставим вам сценарий PowerShell, который вы можете использовать для проверки конфигурации времени на всех контроллерах домена, включая эмулятор PDC корневого домена, а затем предпринять любые действия для исправления конфигурации времени.

Требования

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

  • Сценарий PowerShell должен выполняться в операционной системе Windows Server 2012 или более поздней версии.
  • Убедитесь, что W32tm.exe правильно работает на компьютере, с которого вы будете запускать сценарий PowerShell. Сценарий PowerShell использует W32Tm.exe для сбора конфигурации времени с контроллеров домена.
  • Эмулятор основного контроллера домена корня леса Active Directory должен быть доступен, чтобы получить конфигурацию времени от эмулятора основного контроллера домена корневого домена.

Что делает скрипт?

Скрипт выполняет следующие функции:

  • Извлекает все контроллеры домена из текущего леса Active Directory и экспортирует имена контроллеров домена в файл C:TempGDCList.TXT. Сценарий использует файл «C:TempGDCList.TXT» для проверки конфигурации времени на всех контроллерах домена.
  • Подключается к лесу Active Directory, указанному в переменной $CurForestName, а затем получает имя эмулятора основного контроллера домена. Проверяет конфигурацию времени эмулятора PDC и сообщает о состоянии в файле CSV. Текущий лес, который мы используем в сценарии, — «TechGenix.com».
  • Сценарий выполняет W32Tm.exe для каждого контроллера домена, указанного в «C:TempGDCList.txt», и собирает данные конфигурации времени.
  • Вывод скрипта создается в файле «C:TempADTimeConfiguration.CSV».

Содержание скрипта

[язык кода = «ps»]
### Сценарий начинается здесь ###

$TotNo=0

$ItemCount=0

$ТестТекст = ""

$ Тест Статус = ""

$Сумвал = ""

$AnyGap = "Нет"

$ErrorOrNot = "Нет"

$AnyOneOk = "Нет"

$TotDCsInError = 0

$CurForestName="TechGenix.com"

$TestCSVFile = "C:TempADTimeConfiguration.CSV"

удалить-элемент $TestCSVFile -ErrorAction SilentlyContinue

$ThisString="Контроллер домена,Подключение,Статус команды,Тип контроллера,Настройка синхронизации,Синхронизировать из,Окончательный статус"

Добавить содержимое "$TestCSVFile" $ThisString

$GDCList = "C:TempDCList.TXT"

удалить элемент $GDCList -ErrorAction SilentlyContinue

Сервер DSQuery -O RDN > $GDCList

$Ошибка.Очистить()

$PDCInForest =Get-ADForest $CurForestName | Select-Object -ExpandProperty RootDomain | Получить-ADDomain | Select-Object -Property PDCEmulator

ЕСЛИ ($Error.Count -eq 0)

{

$PDCServer = $PDCInForest.PDCEmulator

$RMNow=w32tm/запрос/конфигурация/компьютер:$PDCServer

$SyncSettingNow = ""

$SyncFrom = ""

$FinStatus = "ОК"

Foreach ($Item в $RMNow)

{

$T1, $T2 = $Item.Split(":")

ЕСЛИ ($T1 -eq "Тип")

{

ЕСЛИ ($T2 -eq " NTP (локальный)")

{

}

еще

{

$AnyGap = "Да"

$FinStatus = "ВНИМАНИЕ: Корневой PDC должен синхронизировать свое время с внешним NTP-сервером, указав значение NTP (локальный) в записи типа реестра. Не рекомендуется использовать NT5DS и AllSync (локальный) для PDC."

}

$SyncSettingNow = $T2

}

ЕСЛИ ($T1 -eq "NtpServer")

{

$SyncFrom = $T2

}

}

$FinalSTR = $PDCServer+",Ok,Ok,PDC,"+$SyncSettingNow+","+'"'+$SyncFrom+'"'+","+$FinStatus

Добавить содержимое "$TestCSVFile" $FinalStr

}

еще

{

$ComConError = $Error[0].Exception.Message

$FinalSTR = $ItemName+",$DCConError,"+$ComConError

Добавить содержимое "$TestCSVFile" $FinalSTR

}

Foreach ($ItemName в Get-Content "$GDCList")

{

$DCConError = "ОК"

$DCConStatus = "ОК"

$ProceedOrNot = "Да"

$Ошибка.Очистить()

$AllServices = Get-WMIObject Win32_Service -computer $ItemName

ЕСЛИ ($Error.Count -ne 0)

{

$ProceedOrNot = "Нет"

$TotDCsInError++

$DCConError = $Error[0].Exception.Message

$FinalSTR = $ItemName+", "Не в порядке: ошибка: $DCConError"

Добавить содержимое "$TestCSVFile" $FinalSTR

}

ЕСЛИ ($ProceedOrNot -eq "Да")

{

$ComConError="ОК"

$Ошибка.Очистить()

$RMNow=w32tm/запрос/конфигурация/компьютер:$ItemName

ЕСЛИ ($Error.count -eq 0)

{

$AnyOneOk="Да"

$SyncSettingNow = ""

$SyncFrom = ""

$FinStatus = "ОК"

Foreach ($Item в $RMNow)

{

$T1, $T2 = $Item.Split(":")

ЕСЛИ ($T1 -eq "Тип")

{

IF ($T2 -eq " NT5DS (локальный)" -или $T2 -eq $Null -или $T2 -eq "")

{

}

еще

{

$AnyGap = "Да"

$FinStatus = "ВНИМАНИЕ: Контроллер домена должен использовать значение NT5DS в записи реестра Type. Не рекомендуется использовать значение реестра AllSync(Local) для контроллеров домена."

}

$SyncSettingNow = $T2

}

ЕСЛИ ($T1 -eq "NtpServer")

{

$SyncFrom = $T2

}

}

ЕСЛИ ($ItemName.ToLower() -eq $PDCServer.ToLower())

{

$FinStatus=""

}

$FinalSTR = $ItemName+","+$DCConError+","+$ComConError+",контроллер домена,"+$SyncSettingNow+","+'"'+$SyncFrom+'"'+","+$FinStatus

Добавить содержимое "$TestCSVFile" $FinalStr

}

еще

{

$ComConError = $Error[0].Exception.Message

$FinalSTR = $ItemName+",$DCConError,"+$ComConError

Добавить содержимое "$TestCSVFile" $FinalSTR

}

}

еще

{

$ComConError = $Error[0].Exception.Message

$FinalSTR = $ItemName+",$DCConError,"+$ComConError

Добавить содержимое "$TestCSVFile" $FinalSTR

}

}

$OthText = ""

ЕСЛИ ($TotDCsInError -ne 0)

{

$OthText = "Некоторые контроллеры домена не были проверены из-за проблем с подключением или командами."

}

ЕСЛИ ($AnyGap -eq "Да")

{

$TestText = "Синхронизация времени контроллера домена неверна. Убедитесь, что PDC синхронизирует свое время с внешнего NTP-сервера, а другие контроллеры домена синхронизируются с использованием параметров синхронизации времени по умолчанию. Все остальные контроллеры домена должны использовать запись реестра NT5DS. $OthText"

$SumVal = $TotNo

$TestStatus="Критический"

}

ЕСЛИ ($AnyGap -eq "Нет")

{

$TestText = "Синхронизация времени правильно настроена в лесу Active Directory. $OthText"

$Сумвал = ""

$TestStatus="Пройдено"

ЕСЛИ ($AnyOneOk -eq "Нет")

{

$TestText = "Ошибка выполнения динамического пакета."

$Сумвал = ""

$TestStatus="Выполнено с ошибками."

}

}

$STR = $ADTestName +","+$TestStartTime+","+$TestStatus+","+$SumVal +","+$TestText

### Сценарий заканчивается здесь ###
[/код]

После завершения выполнения скрипта для всех контроллеров домена в лесу Active Directory в файле CSV будет создан отчет с конфигурацией времени всех контроллеров домена, как показано на снимке экрана ниже.

Как видно на скриншоте, скрипт сообщил о временной настройке всех контроллеров домена, включая эмулятор PDC корневого домена. Как указано в предупреждении в первой строке отчета CSV, эмулятор PDC не настроен на синхронизацию времени из внешнего источника времени, что противоречит рекомендации. Поскольку эмулятор PDC корневого домена всегда считается надежным источником времени, его необходимо настроить для синхронизации времени с надежным внешним источником времени. Все остальные контроллеры домена настроены с правильными настройками времени, кроме контроллера домена DC3.TechGenix.com. DC3.TechGenix.com должен использовать параметр «NT5DS», чтобы использовать иерархию синхронизации времени по умолчанию. Если вы используете профилировщик работоспособности Active Directory, вы можете выполнить для леса Active Directory или домена, а затем отобразить выходные данные динамического пакета в консоли профилировщика работоспособности Active Directory, как показано на снимке экрана ниже..

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

Чтобы скачать скрипт в виде файла.txt: нажмите здесь