В этой статье я покажу вам, как можно расширять схему AD, создавать нестандартные атрибуты и управлять ими в AD — и всё это с помощью Windows PowerShell. Следуя этому руководству, вы сможете устанавливать и управлять собственными атрибутами AD с помощью PowerShell точно так же, как вы управляете другими атрибутами AD.
Стандартная схема Active Directory содержит большинство атрибутов, которые обычно требуются организации в инфраструктуре AD. Однако стандартных атрибутов не всегда достаточно, когда речь идёт о больших организациях. Когда я управлял Active Directory в крупной школе, меня попросили установить несколько атрибутов для пользователей, которые не были доступны в AD по умолчанию. Тогда мне пришлось расширять схему AD для определения кастомных атрибутов и устанавливать эти атрибуты для пользователей.
Атрибуты могут быть любыми, но для целей этой статьи предположим, что мы добавляем два атрибута — «Название кампуса» (
Campus Name
) и «ID кампуса» (Campus ID
).Небольшое предостережение
Обратите внимание, что внесение изменений в схему AD подобно операции на мозге. Любое изменение, хорошее или плохое, которое вы внесёте в схему AD, повлияет на весь «лес» AD. Кроме того, изменения схемы необратимы и не могут быть отменены. Пожалуйста, не пробуйте использовать эти команды непосредственно в производственной среде. Даже если вы эксперт по AD — могут произойти плохие вещи. Я настоятельно рекомендую сначала выполнить эти шаги в тестовой среде.
Необходимые условия
Чтобы успешно выполнить действия, описанные в этой статье, вы должны соблюдать следующие требования:
- Вы должны быть членом группы Active Directory Schema Admins.
- На DC должен быть установлен модуль Active Directory для Windows PowerShell.
- Вы можете выполнить эти шаги непосредственно на DC или через интерактивный сеанс PowerShell (Enter-PSSession) на DC.
Создание идентификаторов OID для объектов AD
Все объекты AD имеют уникальный идентификатор, называемый идентификатором объекта (OID). Сначала мы создадим скрипт для генерации OID для пользовательских атрибутов (Campus Name и Campus ID), которые мы будем добавлять в схему AD. Мы создадим скрипт и назовём его «Generate-OID.ps1».
Чтобы создать скрипт:
Скопируйте приведённый ниже код и сохраните его в файле с именем «Generate-OID.ps1».
$Prefix = "1.2.840.113556.1.8000.2554"
$GUID = [System.Guid]::NewGuid().ToString()
$GUIDPart = @()
$GUIDPart += [UInt64]::Parse($GUID.SubString(0,4), "AllowHexSpecifier")
$GUIDPart += [UInt64]::Parse($GUID.SubString(4,4), "AllowHexSpecifier")
$GUIDPart += [UInt64]::Parse($GUID.SubString(9,4), "AllowHexSpecifier")
$GUIDPart += [UInt64]::Parse($GUID.SubString(14,4), "AllowHexSpecifier")
$GUIDPart += [UInt64]::Parse($GUID.SubString(19,4), "AllowHexSpecifier")
$GUIDPart += [UInt64]::Parse($GUID.SubString(24,6), "AllowHexSpecifier")
$GUIDPart += [UInt64]::Parse($GUID.SubString(30,6), "AllowHexSpecifier")
$OID = [String]::Format("{0}.{1}.{2}.{3}.{4}.{5}.{6}.{7}", $Prefix, $GUIDPart[0], $GUIDPart[1], $GUIDPart[2], $GUIDPart[3], $GUIDPart[4], $GUIDPart[5], $GUIDPart[6])
Write-Host $OID -ForegroundColor Green
Сохраните этот скрипт в нужном месте и удалите расширение файла .txt. Я сохраняю его на диске Z: для более удобного доступа.
Когда скрипт Generate-OID.ps1 будет готов, вы сможете запустить его для генерации OID. На следующем изображении показано, как его запустить.
Запуск скрипта Generate OID.ps1
Убедитесь, что консоль PowerShell запущена с повышенными привилегиями. Чтобы запустить скрипт, загруженный из Интернета, необходимо временно изменить ExecutionPolicy для текущего процесса PowerShell. Когда вы запустите этот скрипт, вы увидите сгенерированный OID в зелёном цвете. При каждом запуске генерируется новый OID. Вам нужно скопировать сгенерированный OID и использовать его в следующем разделе, чтобы вы могли держать этот сеанс PowerShell открытым для следующего раздела.
Создание индивидуальных атрибутов в AD
Прежде чем непосредственно добавить атрибуты, давайте я покажу вам, что они ещё не созданы в моём AD. Я выполню команду Get-ADUser для пользователя student1.
Получаем ошибку кастомных атрибутов ADUser «Одно или несколько значений недопустимы» (
Get-ADUser : One or more properties are invalid.
)Посмотрите на вывод команды Get-ADUser. Там говорится: «Одно или несколько значений недопустимы», что означает, что свойства «Campus Name» и «Campus ID» ещё не существуют в моей среде AD.
Чтобы добавить пользовательские атрибуты «Campus Name» и «Campus ID» в схему AD, мы воспользуемся Windows PowerShell ISE.
- Чтобы запустить ISE из уже открытой консоли PowerShell, просто введите «
ise
» без кавычек и нажмитеEnter
. PowerShell ISE запустится в той же рабочей директории. - Кликните на иконку нового скрипта, чтобы открыть панель скриптов.
- Скопируйте и вставьте следующий код в панель скриптов ISE:
# получить путь к схеме AD
$adSchema = (Get-ADRootDSE).schemaNamingContext
# получить схему пользователя
$userSchema = Get-ADObject -SearchBase $adSchema -Filter "Name -eq 'User'"
# задать короткое имя для кастомного атрибута без пробелов
$attributeName = "CampusName"
# установить краткое описание для кастомного атрибута
$attributeDesc = "Campus Name"
# вставить OID, созданный скриптом "Generate-OID.ps1"
$OID = "1.2.840.113556.1.8000.2554.56779.46056.47028.16885.40810.7627542.10407433"
# oMSyntax - "64" для String (Unicode). Другие типы см. по этой ссылке: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/7cda533e-d7a4-4aec-a517-91d02ff4a1aa
$oMSyntax = 64
# attributeSyntax - "2.5.5.12" для String (Unicode). Другие типы см. по этой ссылке: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/7cda533e-d7a4-4aec-a517-91d02ff4a1aa
$attributeSyntax = "2.5.5.12"
# Установите значение indexable в "1", если вы хотите, чтобы AD индексировал этот атрибут. Устанавливайте это значение только в том случае, если вы будете часто запрашивать этот атрибут AD
$indexable = 0
# создание кастомных атрибутов hashtable
$adAttributes = @{
lDAPDisplayName = $attributeName;
adminDescription = $attributeDesc;
attributeId = $OID;
oMSyntax = $oMSyntax;
attributeSyntax = $attributeSyntax;
searchflags = $indexable
}
# создание кастомного атрибута в схеме AD
New-ADObject -Name $attributeName -Type attributeSchema -Path $adSchema -OtherAttributes $adAttributes
# добавление кастомного атрибута в класс пользователя
$userSchema | Set-ADObject -Add @{mayContain = $attributeName}
Данный скрипт также прилагается и для наглядности.
- Каждая строка кода имеет поясняющий комментарий к работе. Пожалуйста, не запускайте этот код сразу. Есть некоторые разделы, которые необходимо изменить в соответствии с вашими требованиями, прежде чем вы сможете выполнить этот код.
Модификация скрипта PowerShell- Как минимум вам нужно изменить значения переменных
attributeName
,attributeDesc
иOID
, которые отмечены красным цветом на изображении выше. Вы можете установить эти значения по своему усмотрению. - Значение переменной
OID
будет сгенерировано скриптом Generate-OID.ps1, который мы создали в предыдущем разделе. - Вы также можете изменить значения
oMSyntax
,attributeSyntax
и индексируемых переменных. Дополнительные сведения о поддерживаемых значениях атрибутов см. во внутристрочных комментариях.
- Как минимум вам нужно изменить значения переменных
- После внесения изменений, показанных выше, вы можете нажать кнопку «Run Script» или клавишу «F5» для выполнения скрипта
- Если вы не получаете никаких ошибок, ваш пользовательский атрибут (Campus Name) был добавлен
- Чтобы создать второй атрибут (Campus ID), измените значения переменных
attributeName
,attributeDesc
иOID
в скрипте и выполните его снова - После создания атрибутов в схеме AD подождите немного, чтобы изменения смогли воспроизвестись на других контроллерах домена в вашем «лесу». Это может занять некоторое время, в зависимости от размера вашей инфраструктуры Active Directory
- Теперь, когда наши кастомные атрибуты созданы, необходимо перезапустить доменные службы Active Directory, чтобы изменения вступили в силу. Чтобы перезапустить службы с помощью PowerShell, выполните следующую команду:
Get-Service NTDS -DependentServices | Restart-Service -Force -Verbose
- После успешного перезапуска служб AD повторите ту же команду, которую мы выполняли в начале этого раздела:
Get-ADUser student1 -Properties Name, CampusName, CampusID
Кастомные атрибуты Get-ADUser
Видите? Ошибку «Одно или несколько значений недопустимы» — мы больше не получаем. Но подождите минутку! А где же пользовательские атрибуты, которые мы только что создали?
В обычном состоянии эти атрибуты не видны. Чтобы увидеть их, нам нужно выполнить команду PowerShell, показанную ниже:
Get-ADUser student1 -Properties * | Select -Property Name, CampusName, CampusID
Фильтр кастомных атрибутов Get-ADUser
Нам просто нужно сказать модулю AD PowerShell о том, чтобы он получил все параметры для выбранного пользователя, а затем передал результаты командлету Select-Object для фильтрации и отображения только выбранных свойств (
Name
, CampusName
и CampusCode
).В следующем разделе мы обсудим, как управлять этими пользовательскими атрибутами с помощью Windows PowerShell.
Управление кастомными атрибутами с помощью PowerShell
На данном этапе у нас уже есть собственные атрибуты, доступные для использования в Active Directory. Вы можете использовать инструменты GUI или Windows PowerShell для управления (установки, изменения или удаления) этими кастомными атрибутами для пользователей AD. Поскольку мы все делали с помощью PowerShell, то давайте этого и придерживаться.
Установка кастомных атрибутов
Чтобы установить значение для наших атрибутов, выполните следующую команду в консоли PowerShell:
Set-ADUser student1 -Add @{CampusName="NewYorkISD"; CampusID="NYISD001"}
Мы использовали формат PowerShell hashtable с параметром
-Add
для присвоения значений кастомным атрибутам.Вывод данных из кастомных атрибутов
Чтобы вывести в командной строке данные из настроенных нами атрибутов, выполните следующую команду:
Get-ADUser student1 -Properties * | Select -Property Name, CampusName, CampusID
Настройка Get-ADUser на добавление кастомных атрибутов
Как вы видите, значения теперь присвоены созданным нами атрибутам.
Модификация кастомных атрибутов
Как только мы зададим атрибуты, вы больше не сможете использовать параметр
-Add
вместе с командой Set-ADUser
. Это связано с тем, что мы создали кастомные атрибуты, которые могут содержать только единичные значения. Чтобы изменить значение наших атрибутов, нам нужно использовать параметр -Replace
. Обновлённая команда будет выглядеть следующим образом:Set-ADUser student1 -Replace @{CampusName="LAISD"; CampusID="LAISD001"}
Настройка Get-ADUser на модификацию кастомных атрибутов
Удаление значений кастомных атрибутов
Чтобы удалить значения настроенных нами атрибутов, выполните следующую команду:
Set-ADUser student1 -Remove @{CampusName="LAISD"; CampusID="LAISD001"}
Чтобы удалить все значения атрибутов, мы используем параметр -Remove.
Настройка Get-ADUser на удаление кастомных атрибутов
На этом мы заканчиваем данную статью. Сегодня вы узнали, как расширять схему Active Directory для добавления кастомных атрибутов и как управлять этими атрибутами с помощью Windows PowerShell!
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.