[Перевод] Создание и использование собственных атрибутов AD в PowerShell

vhdc1fxelay-zqhm00x7wjthpk0.png


В этой статье я покажу вам, как можно расширять схему 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. На следующем изображении показано, как его запустить.

imageЗапуск скрипта Generate OID.ps1

Убедитесь, что консоль PowerShell запущена с повышенными привилегиями. Чтобы запустить скрипт, загруженный из Интернета, необходимо временно изменить ExecutionPolicy для текущего процесса PowerShell. Когда вы запустите этот скрипт, вы увидите сгенерированный OID в зелёном цвете. При каждом запуске генерируется новый OID. Вам нужно скопировать сгенерированный OID и использовать его в следующем разделе, чтобы вы могли держать этот сеанс PowerShell открытым для следующего раздела.

Создание индивидуальных атрибутов в AD


Прежде чем непосредственно добавить атрибуты, давайте я покажу вам, что они ещё не созданы в моём AD. Я выполню команду Get-ADUser для пользователя student1.

imageПолучаем ошибку кастомных атрибутов ADUser «Одно или несколько значений недопустимы» (Get-ADUser : One or more properties are invalid.)

Посмотрите на вывод команды Get-ADUser. Там говорится: «Одно или несколько значений недопустимы», что означает, что свойства «Campus Name» и «Campus ID» ещё не существуют в моей среде AD.

Чтобы добавить пользовательские атрибуты «Campus Name» и «Campus ID» в схему AD, мы воспользуемся Windows PowerShell ISE.

  1. Чтобы запустить ISE из уже открытой консоли PowerShell, просто введите »ise» без кавычек и нажмите Enter. PowerShell ISE запустится в той же рабочей директории.
  2. Кликните на иконку нового скрипта, чтобы открыть панель скриптов.
  3. Скопируйте и вставьте следующий код в панель скриптов 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} 


Данный скрипт также прилагается и для наглядности.

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

    imageМодификация скрипта PowerShell

    • Как минимум вам нужно изменить значения переменных attributeName, attributeDesc и OID, которые отмечены красным цветом на изображении выше. Вы можете установить эти значения по своему усмотрению.
    • Значение переменной OID будет сгенерировано скриптом Generate-OID.ps1, который мы создали в предыдущем разделе.
    • Вы также можете изменить значения oMSyntax, attributeSyntax и индексируемых переменных. Дополнительные сведения о поддерживаемых значениях атрибутов см. во внутристрочных комментариях.

  2. После внесения изменений, показанных выше, вы можете нажать кнопку «Run Script» или клавишу «F5» для выполнения скрипта
  3. Если вы не получаете никаких ошибок, ваш пользовательский атрибут (Campus Name) был добавлен
  4. Чтобы создать второй атрибут (Campus ID), измените значения переменных attributeName, attributeDesc и OID в скрипте и выполните его снова
  5. После создания атрибутов в схеме AD подождите немного, чтобы изменения смогли воспроизвестись на других контроллерах домена в вашем «лесу». Это может занять некоторое время, в зависимости от размера вашей инфраструктуры Active Directory
  6. Теперь, когда наши кастомные атрибуты созданы, необходимо перезапустить доменные службы Active Directory, чтобы изменения вступили в силу. Чтобы перезапустить службы с помощью PowerShell, выполните следующую команду:
    Get-Service NTDS -DependentServices | Restart-Service -Force -Verbose
  7. После успешного перезапуска служб AD повторите ту же команду, которую мы выполняли в начале этого раздела:
    Get-ADUser student1 -Properties Name, CampusName, CampusID

    imageКастомные атрибуты Get-ADUser


Видите? Ошибку «Одно или несколько значений недопустимы» — мы больше не получаем. Но подождите минутку! А где же пользовательские атрибуты, которые мы только что создали?

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

Get-ADUser student1 -Properties * | Select -Property Name, CampusName, CampusID


imageФильтр кастомных атрибутов 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


imageНастройка Get-ADUser на добавление кастомных атрибутов

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

Модификация кастомных атрибутов


Как только мы зададим атрибуты, вы больше не сможете использовать параметр -Add вместе с командой Set-ADUser. Это связано с тем, что мы создали кастомные атрибуты, которые могут содержать только единичные значения. Чтобы изменить значение наших атрибутов, нам нужно использовать параметр -Replace. Обновлённая команда будет выглядеть следующим образом:

Set-ADUser student1 -Replace @{CampusName="LAISD"; CampusID="LAISD001"}


imageНастройка Get-ADUser на модификацию кастомных атрибутов

Удаление значений кастомных атрибутов


Чтобы удалить значения настроенных нами атрибутов, выполните следующую команду:

Set-ADUser student1 -Remove @{CampusName="LAISD"; CampusID="LAISD001"}


Чтобы удалить все значения атрибутов, мы используем параметр -Remove.

imageНастройка Get-ADUser на удаление кастомных атрибутов

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


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

© Habrahabr.ru