Раздел: Скрипты

Создаём пользователя в AD из Powershell

В этой статье я расскажу о том, как можно с помощью PowerShell через ADSI(Active Directory Service Interfaces) создавать пользователей в Active Directory и изменять их параметры. ADSI - это интерфейс, предназначенный для доступа к Active Directory. Он позволяет создавать, изменять и удалять объекты в каталогах, выполнять поиск и т. д.

Примечание:

Если вы используете Organizational Unit (OU) - то используйте OU=Name_of_OU а не CN, как в примере

Для того, чтобы создать учётную запись пользователя, нужно сначала присоединиться к одному из контейнеров. Пусть это будет контейнер Users:
$objOU=[ADSI]"LDAP://CN=Users,DC=Mydomain,DC=com"

Таким образом, мы подсоединились к контейнеру Users в домене Mydomain.com, т.е. переменная $objOU содержит информацию об этом объекте. Через эту переменную мы можем применять методы по отношению к объекту(повторюсь, в данном случае этот объект — контейнер CN=Users ). Например, чтобы создать пользователя, воспользуемся методом Create:
$obJUSER=$objOU.Create("user","CN=Vasiliy Petrov")
В скобках мы указали тип объекта (user) и его CN (Common Name).

Далее, укажем некоторые атрибуты пользователя:$obJUSER.Put("SamAccountName","mary.north") # имя входа в домен
$obJUSER.Put("givenName","Mary") # Имя
$obJUSER.Put("sn","North") # фамилия
$obJUSER.Put("displayName","Мария Север") # выводимое имя

К сожалению, для каждого параметра мы должны писать отдельную строку подобным образом. Далее, привожу список некоторых допустимых атрибутов(не всегда понятных по их наименованию) с их описанием, значения которых можно указать:
dn - различимое имя объекта в АД
objectclass - тип объекта - user, computer
SamAccountname - имя, под которым входят в домен
sn - Фамилия
givenname - Имя
userprincipalname - полное имя
mail - электронная почта
displayName - выводимое имя
description - описание
department - департамент
company - компания
telephoneNumber - номер телефона
physicalDeliveryOfficeName - комната
WWWHomePage - вебстраница
initials - инициалы
streetAddress - улица
postOfficeBox - почтовый ящик
postalCode - индекс
l - город
st - область
homePhone - домашний телефон
pager - пейджер
mobile - мобильник
ipphone - ip телефон
facsimileTelephoneNumber - факс
title - должность
info - заметки

Полный список атрибутов можно посмотреть на вкладке Attribute Editor (Редактор атрибутов) в свойствах любого пользователя в оснастке Active Directory — Users and computers (Пользователи и компьютеры):
Start(Пуск) -> Administrative Tools (Администрирование) -> Active Directory Users and Computers (Active Directory пользователи и компьютеры)

В данной оснастке необходимо установить галочку View(Вид)->Advanced Features(Дополнительные компоненты), и только затем можно зайти в свойства пользователя и увидеть там вкладку Attribute Editor (Редактор атрибутов). Все эти атрибуты мы можем изменять из PowerShell указанным выше способом.

Теперь, необходимо подтвердить изменения с помощью метода SetInfo; только после этого изменения будут внесены в ActiveDirectory.
$objUser.SetInfo()
То есть, сначала вы изменяете все данные пользователя, а потом сохраняете изменения. Без применения метода SetInfo — изменения не будут сохранены.

Если вы внесли некоторые неверные изменения до применения метода SetInfo(), то вы можете их отменить с помощью метода GetInfo:
$objUser.GetInfo()

После создания пользователя можно задать ему пароль:
$objUser.SetPassword("P@$$w0rd")
Задать пароль можно только методом SetPassword() и только после создания пользователя, то есть после применения метода SetInfo() для создаваемого пользователя.

Созданная учётная запись пользователя является выключенной. Чтобы её включить, необходимо ввести следующую команду и после этого выполнить метод SetInfo():
$objUser.psbase.InvokeSet("AccountDisabled",$false)
$objUser.SetInfo()

Для автоматизации процесса, можно написать функцию, которая будет добавлять пользователя в ActiveDirectory. Например, вот такая функция будет добавлять пользователя с указанием его CommonName, SamAccountname и пароля:
function Add-AdUser ($commonname,$SamAccountName,$Pass) {
$objOU=[ADSI]"LDAP://OU=People,DC=witch2,DC=com"
$obJUSER=$objOU.Create("user","CN=$commonname")
$obJUSER.Put("SamAccountName",$SamAccountName)
$objUser.SetInfo()
$objUser.SetPassword($Pass)
$objUser.psbase.InvokeSet("AccountDisabled",$false)
$objUser.SetInfo()
}

Как видите, эта функция полностью повторяет порядок действий, описанный в статье. Для её запуска достаточно набрать:
Add-AdUser TestUser testuser P@$$w0rd
Будьте внимательны, здесь может произойти ошибка, если вы укажете пароль, не соответствующий политикам безопасности (по длине, сложности, итд.), или же если вы укажете пользователя, который уже существует в ActiveDirectory. Если вы ошиблись с паролем, то имейте в виду, что пользователь уже создан в AD, просто для него не указан пароль, и поэтому повторное выполнение функции для того же пользователя завершиться ошибкой. Поэтому, либо отдельно изменяйте пароль, либо удалите пользователя из AD и примените функцию заново.

Для параметра, который может содержать несколько отдельных слов (например, SamAccountName) — используйте кавычки:
Add-AdUser "Susan Jackson" susannajackson $tr0ngP@$$w0rd

Комментировать

Комментарии

14 + пятнадцать =

  1. Добрый день!
    а если в названии юнита есть символ » (кавычки), как будет выглядеть строка:
    $objOU=[ADSI]»LDAP://OU=People,DC=witch2,DC=com»
    ?