Изменения схемы Active Directory (AD) могут привести к операционным проблемам. В целом схема не должна изменяться. Но если устанавливается новое приложение, зависящее от Active Directory, например, Microsoft Exchange Server, то схему необходимо обновить для поддержки приложения. Для защиты целостности AD стоит убедиться, что только утвержденные изменения схемы производятся.
С помощью PowerShell легко создать отчет об изменениях схемы AD. Но прежде чем запустить код в этой статье, установите модуль PowerShell для Active Directory Windows Server. Модуль PowerShell Active Directory установлен на контроллерах домена (DC) по умолчанию. Однако рекомендуется выполнять повседневные административные задачи с компьютера Windows 10, присоединенного к домену.
Установка модуля PowerShell Active Directory Windows Server
Модуль AD PowerShell является частью Remote Server Administration Tools (RSAT) для служб домена Active Directory. Чтобы установить инструменты RSAT AD, откройте консоль PowerShell с привилегиями локального администратора и выполните следующие команды:
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online
После установки инструментов можно закрыть поднятое окно PowerShell. Для запуска остальных команд в этой статье вам нужно просто войти в Windows 10 под учетной записью, принадлежащей к группе Active Directory \”Пользователи домена\”.
Дополнительную информацию об установке RSAT в Windows 10 см. в статье Как установить средства администрирования удаленных серверов на Windows 10 на Petri.
Отчет о изменениях схемы AD с использованием PowerShell
С помощью командлета Get-ADObject можно отобразить изменения схемы. Но сначала нам нужно предоставить Get-ADObject базу поиска, или, другими словами, область каталога для поиска. Мы хотим искать схему, поэтому нам нужно знать имя контекста схемы нашего каталога. К счастью, это легко получить с помощью командлета Get-ADRootDSE. Если вы запустите Get-ADRootDSE без каких-либо параметров, вы увидите путь к схеме именования каталога в выходных данных.
PowerShell позволяет легко извлечь любую свойство, например schemaNamingContext, используя точку и круглые скобки, как показано ниже:
((Get-ADRootDSE).schemanamingcontext)
Мы можем использовать приведенный выше код в качестве значения для параметра -SearchBase в командлете Get-ADObject. Но есть еще несколько параметров, которые нам нужно добавить. -SearchScope должен быть установлен на OneLevel, что означает поиск непосредственных дочерних объектов пути, указанного в параметре -SearchBase. Значением параметра -Filter является символ звездочки (*), который возвращает все.
Наконец, мы используем параметр -Properties для указания свойств, которые мы хотим вернуть в качестве части вывода. Как видите, я собираюсь извлечь objectClass, name, whenChanged, и whenCreated свойства.
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated
Мы хотим сгруппировать данные, возвращенные по дате. Для этого нам нужна дата whenCreated без информации о времени. Мы можем использовать командлет Select-Object и создать новый объект с необходимыми данными в правильном формате, используя вычисляемое свойство. В расширенной команде ниже вы можете видеть, что я связал объект, созданный с помощью Get-ADObject, с командлетом Select-Object. Знак @ указывает на вычисляемое свойство, у которого есть метка “Событие” и выражение, которое возвращает только дату из свойства whenCreated в короткой форме.
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}}
Затем мы направим объект, созданный Select-Object, к командлету Sort-Object, чтобы отсортировать данные объекта по свойству whenCreated.
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated
Наконец, направим объект к командлету Format-Table. Он отобразит свойства в виде таблицы, сгруппировав их по Событию, которое мы создали с помощью командлета Select-Object.
$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated $schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
Если мы выполним весь код вместе, мы увидим изменения схемы, перечисленные в окне командной строки. В моем каталоге установлен Exchange Server, поэтому мы можем увидеть множество изменений в схеме.
Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/