Элементы проверки работоспособности групповой политики Active Directory (часть 5)

Опубликовано: 17 Марта, 2023

Если вы хотите прочитать другие части этой серии статей, перейдите по ссылке:

  • Элементы проверки работоспособности групповой политики Active Directory (часть 1)
  • Элементы проверки работоспособности групповой политики Active Directory (часть 2)
  • Элементы проверки работоспособности групповой политики Active Directory (часть 3)
  • Элементы проверки работоспособности групповой политики Active Directory (часть 4)

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

В большой среде Active Directory у вас может быть несколько команд, работающих над несколькими задачами Active Directory. Например, у вас может быть ИТ-команда, которая занимается созданием и изменением пользователей для финансового отдела. Вы можете создать специальную группу, в обязанности которой входит присоединение компьютеров к домену для отдела продаж. У вас также может быть специальная команда, которая работает над элементами групповой политики, такими как изменение параметров GPO для отдела финансов и продаж. В большой среде Active Directory с сотнями объектов групповой политики необходимо предоставить описательный текст для каждого объекта групповой политики, чтобы ИТ-группы могли легко идентифицировать объекты групповой политики. Вы можете не захотеть, чтобы ИТ-команда по продажам касалась финансовых объектов групповой политики и наоборот. Неправильное изменение объекта групповой политики может привести к применению ненужных параметров объекта групповой политики к компьютерам Active Directory, которым они не нужны. Хотя предоставление текста описания при создании объектов групповой политики не является обязательным, вам будет сложно определить роль объектов групповой политики, если над объектами групповой политики работает несколько групп, а в домене созданы сотни объектов групповой политики. Вот где эта статья пригодится. В этой статье мы предоставим сценарий PowerShell, который можно использовать для сбора списка объектов групповой политики, для которых не задан описательный текст, и последующего выполнения соответствующих действий.

Требования

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

  • Убедитесь, что сценарий PowerShell, описанный ниже, выполняется на компьютере с операционной системой Windows Server 2012 или более поздней версии.
  • Поскольку сценарий PowerShell использует командлет Get-GPO PowerShell, обязательно установите модули PowerShell групповой политики через диспетчер серверов. Все, что вам нужно сделать, это включить функцию GPMC, которая, в свою очередь, установит необходимые модули PowerShell групповой политики.
  • Эмулятор PDC для каждого домена должен быть доступен для сбора списка объектов групповой политики. Ниже сценарий PowerShell собирает объекты групповой политики из каждого домена в домене Active Directory. Для связи с доменом скрипт подключается к эмулятору PDC каждого домена.

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

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

  • Извлекает все домены из текущего леса Active Directory.
  • Подключается к эмулятору PDC каждого домена.
  • Выполняет командлет PowerShell Get-GPO для сбора объектов групповой политики и текста их описания.
  • Сценарий проверяет, для скольких объектов групповой политики не задан текст описания.
  • Выходные данные сценария создаются в файле C:TempGPOsDescriptionText.CSV.

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

### Сценарий начинается здесь ###

$TotNo=0
$ItemCount=0
$ТестТекст = ""
$ТестСтатус=""
$Сумвал = ""
$GDomList = "C:TempDomList.DPC"
Удалить элемент $GDomList -ErrorAction SilentlyContinue
$TestCSVFile = "C:TempGPOsDescriptionText.CSV"
Удалить элемент $TestCSVFile -ErrorAction SilentlyContinue
$CurForestName = "TechGenix.com"
$R=Get-ADForest $CurForestName
ForEach ($DomName в $R.Domains)
{
Add-Content $GDomList $DomName
}
ForEach ($ThisDomain в Get-Content "$GDomList")
{
$PDCServerToConnect = "Неизвестно"
ЕСЛИ ($HitWin2012DC -eq "Да" -и $CredInputForPS -eq "Файл")
{
$PDCCSV = Импорт-CSV $PrefDCFile
ForEach ($ItemNow в $PDCCSV)
{
ЕСЛИ ($ItemNow.Domain -eq $ThisDomain)
{
$PDCServerToConnect = $ItemNow.'Предпочитаемый контроллер домена'
ломать
}
}
}
еще
{
$PDCCSV = Импорт-CSV $PDCListFile
ForEach ($ItemNow в $PDCCSV)
{
ЕСЛИ ($ItemNow.Domain -eq $ThisDomain)
{
$PDCServerToConnect = $ItemNow.PDCServer
ломать
}
}
}
$Ошибка.Очистить()
$AllGPOdes=Get-GPO -ALL -Domain $ThisDomain -Server $PDCServerToConnect | где {$_.DEscription -eq $null}
ЕСЛИ ($Error.count -eq 0)
{
}
еще
{
$ErrorOrNot="Да"
}
ЕСЛИ ($ErrorOrNot -eq "Да")
{
$TestText = "Пожалуйста, убедитесь, что контроллер домена доступен для выполнения Dynamic Pack."
$Сумвал = ""
$TestStatus="Ошибка выполнения динамического пакета."
}
еще
{
$Items = $AllGPOдес
$ItemCount=$AllGPOdes.Count
$ Окончательный текст = ""
$ SumVal = $ Количество предметов
ForEach ($ThisItem в $Items)
{
$ThisDesToCheck = $ThisItem.Description
$StatusNow="ОК"
ЕСЛИ ($ThisDesToCheck -eq $Null)
{
$TotNo++
$StatusNow="Не в порядке"
}
$FinalVal=$ThisDomain+","+$PDCServerToConnect+","+$ThisItem.DisplayName+","+$ThisItem.Description+","+$StatusNow Add-Content "$TestCSVFile" $FinalVal
}
ЕСЛИ ($TotNo -ge 0)
{
$TestText = "Для некоторых объектов групповой политики не задан текст описания. Рекомендуется установить описание для каждого объекта групповой политики, чтобы
легко определить функцию GPO».
$TestStatus="Средний"
$SumVal = $TotNo
}
ЕСЛИ ($TotNo -eq 0)
{
$TestText = "Все GPO определяются текстом описания."
$TestStatus="Пройдено"
$SumVal = $TotNo
}
}
}
$STR = $ADTestName +","+$TestStartTime+","+$TestStatus+","+$SumVal +","+$TestText

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

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

Рис. 1. Отображение объектов групповой политики, для которых не задан текст описания

Как вы можете видеть на снимке экрана выше, сценарий сообщает как об объектах групповой политики, для которых задан текст описания, так и об объектах групповой политики, для которых не задан текст описания. Сценарий проверяет каждый объект групповой политики и его свойство Description, чтобы узнать, пусто ли поле описания объекта групповой политики. Сценарий использует переменную « $CurForestName » для подключения к лесу Active Directory, собирает домены, а затем все объекты групповой политики из каждого домена. Сценарий весьма полезен, когда у вас есть сотни объектов групповой политики, настроенных в ваших доменах Active Directory, и вы не знаете, для каких объектов групповой политики не задан текст описания. Если вы используете профилировщик работоспособности Active Directory, вы можете выполнить динамический пакет проверки описания объекта групповой политики домена для леса Active Directory или домена, а затем отобразить выходные данные динамического пакета в консоли профилировщика работоспособности ActiveDirectory, как показано на рис. 2 ниже.

Рис. 2. Отображение отчета GPO в консоли AD Health Profiler

Сводка и следующий элемент проверки работоспособности объекта групповой политики

В этой части мы сосредоточились на сборе списка объектов групповой политики, для которых не задан текст описания. Вы можете включить приведенный выше сценарий PowerShell в процедуру проверки работоспособности Active Directory. В случае возникновения каких-либо проблем при запуске скрипта, отправьте электронное письмо по адресу [email protected].

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