В данной статье расскажем как модифицировать с помощью скрипта php атрибуты пользователя домена Windows.
Вот неполный список нашего пользователя и его атрибутов в Active Directory отображен на рисунке ниже.

Итак если мы хотим модифицировать, изменить данные указанные в атрибутах ( ФИО, должность, телефон, город, адрес и так далее), нам необходиом использовать следующий небольшой скрипт на php
$ldaprdn = 'имя'; // ldap rdn или dn
$ldappass = 'пароль'; // ассоциированный пароль
как обычно сначала вводим имя и пароль на доступ к LDAP каталогу.
Права этого пользователя должны быть достаточны для того, что бы изментяь атрибуты.
имя - это имя пользователя, оно может быть как в виде rdn то есть сокращенной записи типа admin, так и в виде dn записи cn=admin,ou=samara,dc=ru
$ldapconn = ldap_connect("IP_address") or die("Не могу соединиться с сервером LDAP.");
Подключаемся к AD серверу (контроллеру домена). Порт по умолчанию стандартный (389)
if ($ldapconn) {
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
if ($ldapbind) { echo "LDAP-привязка успешна..."; } else { echo "LDAP-привязка не удалась..."; }
}
проверяем, успешно ли прошло соединение
$dn = "OU=XXXX,OU=YYYY,DC=samara,DC=ru";
указываем DN - путь иерархии в каталоге LDAP где находится наш пользователь.
$filter="(mail=ivanov@gmail*)";
Указываем, по какому аттрибуту будем искать пользователя. В нашем примере мы ищем пользователя у кого в атрибуте mail адрес электронной почты начинается на ivanov@gmail
Звездочка означает что электронный адрес может быть таким ivanov@gmail.com или ivanov@gmail.ru или вообще ivanov@gmailik.net
$sr=ldap_search($ldapconn, $dn, $filter);
Запускаем поиск по каталогу LDAP с заданными аттрибутами
$info = ldap_get_entries($ldapconn, $sr);
Записываем в переменную полученные совпадения
Если нашли одного пользователя то все атрибуты можно вытащить вот так
echo $info[0]["mail"][0];
тогда система даст информацию о электронной почте
или
$info[0]["telephoneNumber"][0];
тогда мы увидим телефонный номер этого сотрудника.
Что же нам осталось сделать что бы изменить данные в LDAP каталоге ?
$entry["mobile"][0]=892725111110
$entry["info"][0]=iconv("UTF-8","Cp1251","У этого пользователя мы сменили аттрибуты");
Создать массив $entry с теми атрибутами, что нам необходимо сменить и присваиваем этим значениям массива новые данные.
Если мы пишем данные в какой либо атрибут в национальной кодировке в частности русской, не забудьте переконвертировать его в правильный формат.
Это очень важно когда новые данные берутся из какого либо файла , в отличной кодировке.
Если не сделать переконвертацию, мы получим ошибку и наш атрибут не будет изменен.
ldap_modify ($ldapconn, $info[0]["dn"], $entry);
И последняя команда которая модифицирует атрибуты объекта который имеет уникальный dn равный $info[0]["dn"]
Вот и всё. Мы научились записывать в каталог Active Directory новые данные через командную строку.