Как известно, одним из способов массового импорта пользователей является импорт пользователей из каталога Active Directory. Однако, на такой вариант импорта накладываются некоторые ограничения:
Невозможно вторично импортировать данные по существующим в системе пользователям.
Невозможно запускать компоненту импорта через командную строку в автономном режиме.
Нет возможности импортировать дополнительную информацию об учетной записи из каталога Active Directory (загружается только информация необходимая для генерации пользователя).
При очередном внедрении системы, заказчик поставил жесткие требования на импорт пользователей из каталога:
Должна быть возможность многократного импорта данных по существующим пользователям с целью обновления информации по данным пользователям (отключение учетной записи, загрузка сертификатов, группы пользователя и пр.)
Импорт пользовательских групп с типами Organization Units и Universal Groups с учетом иерархии в Active Directory. Обновление информации по вхождению пользователя в ту или иную группу.
Импорт пользовательских сертификатов.
Автоматическое связывание учетной записи пользователя с существующей записью справочника
Работники.
Импорт E-mail адреса пользователя (в последствии использовался для рассылки уведомлений о новых заданиях).
Закрытие учетной записи пользователя системы DIRECTUM, в случае отключения ее в каталоге Active Directory.
Работа автономном режиме через командную строку по назначенным заданиям.
В результате работы было разработано решение в виде сценария, отвечающего данным требованиям. Из основного функционала сценария можно отметить следующее:
Импорт учетной записи пользователя. Импортируется логин пользователя и полное имя.
Импорт пользовательских групп. Импортируются группы пользователя в которые входит учетная запись каталога (импортируются группы с типом Organization Unit и Universal Groups). При этом учитывается иерархия каталогов домена.
Импорт пользовательских сертификатов. Импортируются действующие сертификаты учетных записей каталога и сертификаты, срок действия которых еще не наступил, предназначенных для подписания и шифрования.
Удаление/закрытие учетной записи. Удаление логина пользователя и закрытие записи справочника
Пользователи при отключении учетной записи каталога.
Привязка учетной записи к работнику. Учетная запись пользователя привязывается к записи справочника
Работники, для которой совпадает значение реквизита Фамилия И.О. с полным именем учетной записи каталога.
Импорт адреса E-mail. Если для учетной записи импортированного пользователя была привязана к записи
Работники, то для соответствующей записи справочника Персоны
записывается пользовательский адрес электронной почты.
Сценарий позволяет работать в визуальном режиме (когда требуется обработать одну или несколько учетных записей) и в скрытом режиме (когда производится обработка всех учетных записей без участия администратора).
Ну и для наглядности, приведу пример визуальной работы сценария.
Итак, запустив сценарий, настраиваем параметры импорта и жмем ОК:
На следующем шаге выбираем импортируемых пользователей пользователей. Переносим нужных пользователей из левой колонки в правую и жмем кнопку
ОК:
После того, как пользователи импортируются видим сообщение об окончании работы сценария:
О том какие действия были произведены с учетными записями можем посмотреть в логе импорта.
Импорт пользователей из AD является очень важной задачкой, необходимая
для многих проектов, потому что многие компании поддерживают данное программное обеспечение. Ограничения, которые были раньше не позволяли использовать все возможности и полностью поддерживать актуальный список сотрудников компании. Сейчас данный функционал
расширился и надеемся, что данный сценарий будет разрабатываться дальше и будет использоваться во многих проектах.
В данном случае, сценарий скорее всего сталкивается с проблемой подвязки пользователя к работнику (просто не находит соответствие имен).
Подвязка E-mail осуществляется к подвязанной записи работника. В связи с тем что, работник не подвязывается к пользователю, почтовый адрес не может быть записан.
В данном случае просто нужно адаптировать к вашим требованиям поиск соответствия имен в справочниках, и почтовые адреса будут корректно заносится в систему.
Извините, пожалуйста за глупый вопрос. Я начинающий "пользователь" системы директум. Утилита эта действительно очень необходима, особенно для крупным организаций. Я установила утлиту через импорт разработки. А где ее дальше искать?
Здравствуйте, Екатерина. В данном случае это не утилита, а сценарий системы DIRECTUM.
Искать данный сценарий следует в компоненте "Сценарии". Данная компонента расположена по следующему пути в проводнике системы:
"Компоненты->Утилиты разработчика->Сценарии"
Далее запустите эту компоненту и найдите в списке сценарий с заголовком "Импорт пользователей из Active Directory". Сценарий будет доступен для запуска или редактирования.
Также для удобства эксплуатации сценария можно настроить вариант запуска сценария в проводнике системы. О том как настроить вариант запуска в проводнике вы можете прочесть в справочном руководстве.
Настройки доступа к AD в тексте сценария задавать не нужно. При выполнении скрипта появится диалоговое окно с запросом параметров соединения с каталогом AD и параметрами импорта. Скрин этого окна представлен выше: первый по счету скрин статьи Антона.
Вот такая вот ошибка вылезла. В чем причина понять не могу. В параметрах выставляю галочки "Привязать пользователя", "Импортировать мыло" и "Импортировать группы". Кто то уже сталкивался с таким?
Антон, хотел обратить внимание, что в сценарии есть строка
DDS2.ISBCertificateType = CERTIFICATE_TYPE_SIGN
То есть получается, что всегда тип у сертификата "ЭЦП". В описании написано "Импортируются действующие сертификаты учетных записей каталога .... предназначенных для
подписания и шифрования. "
И в ldap запросе нет проверок, для чего предназначен сертификат.
Очень хороший и полезный сценарий, спасибо большое!
Есть пожелание - можно ли добавить в качестве параметра имя контейнера (ou)?
Если список пользователей очень большой, то выбирать из него не очень удобно, да и не дойдет до этого дело - сценарий отваливается по тайм-ауту, наверное, при опросе домена (домен очень крупный, и к тому же невозможно выполнять работы на контроллерах домена,
а каналы не везде широкие).
(This operation returned because the timeout period expired. Сценарий "ADIU_ActiveDirectoryImport": ошибка в строке 204)
Я внес небольшое изменение в сценарий "Импорт пользователей из Active Directory" - добавил в качестве параметра имя контейнера (OU). Не могу приложить к этому сообщению файл, если заинтересует - пишите.
Поле необязательное, если не заполнено, то сценарий работает, как и раньше. А если имя контейнера указано, то показывает выбор пользователей только из этого контейнера (и вложенных в него контейнеров).
Но есть одно ограничение - сам указываемый контейнер должен быть в домене на самом первом уровне вложенности.
Аналогичная ошибка как у Сергея Ершова чуть выше, и судя по строке в которой ошибка выходит ее разработчики изначально хотели не отображать (exceptionsOff - exceptionsOn):
Добрый день, Антон! Я внес небольшое изменение в сценарий "Импорт пользователей из Active Directory" - добавил в качестве параметра имя контейнера (OU). Не могу приложить к этому сообщению файл, если заинтересует - пишите. Поле необязательное,
если не заполнено, то сценарий работает, как и раньше. А если имя контейнера указано, то показывает выбор пользователей только из этого контейнера (и вложенных в него контейнеров). Но есть одно ограничение - сам указываемый контейнер должен быть в домене на
самом первом уровне вложенности. 14 марта 2012 в 13:04
Добрый день Руслан,
могли бы вы мне тоже прислать измененный сценарий?
Руслан, не удается ввести нужный OU (ни в формате ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com ни в формате Legacy\Russia\Moscow\Users ) - места не хватает в поле для ввода значения поля. В каком формате правильно вводить, и можно ли просто захардкодить
в сценарии нужный OU?
Дмитрий, нужно ввести просто наименование OU (то бишь его name). Сценарий сам выполняет поиск в AD по наименованию и получает его distinguishedName. Тут может быть подвох - я не уверен, но мне кажется, что могут быть разные OU с одинаковым name, тогда сценарий
возьмет первый попавшийся.
Руслан, не удается ввести нужный OU (ни в формате ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com ни в формате Legacy\Russia\Moscow\Users ) - места не хватает в поле для ввода значения поля. В каком формате правильно вводить,
и можно ли просто захардкодить в сценарии нужный OU?
Да, это наш случай, есть повторяющиеся имена OU в домене. Значит, нам придется жестко вписать OU в код сценария.
"Этим хирургам лишь бы чего нибудь отрезать...". Темная сторона Вас так и манит :)
Как я понял из предыдущего поста, для Вас не проблема вводить имя OU в формате "ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com". Тогда просто сделайте в вызове InputDialog длину запрашиваемой строки побольше, и закомментируйте несколько строчек
кода, где выполняется запрос к AD для поиска distinguishedName для заданного OU. Там еще переменной присваивается результат запроса, вместо этого присвойте ей то, что пользователь ввел в InputDialog (к сожалению, у меня сейчас под рукой нет текста сценария).
А еще лучше - добавить к запросу InputDialog еще один параметр, который будет определять, как сценарий интерпретирует введенную строку - как наименование или как distinguishedName, и в зависимости от этого выполнять или не выполнять поиск.
Подскажите пожалуйста, а как использовать вариант Руслана? В прикрепленном к статье файле "Версия Руслана Бапина", есть только xml файла.Процитировать
выделенное
Сер Бутенко 1 июля 2014 в 15:24 Могли бы вы мне тоже прислать исправленный сценарий? Он работает с последней версией? У меня пользователей импортирует, группы и почту нет.
Если вопрос ко мне, то моя версия сценария прикреплена к материалу. Больше я ничего не исправлял. Да, кстати, выше
Natalie shevchenko сообщала, что в моем сценарии встречается вызов функции
ADIU_ImportUser_New(), прошу прощения, это, видимо, следы каких-то моих опытов, можно просто заменить на вызов исходной функции ADIU_ImportUser()
Руслан, Добрый день, подскажите пожалуйста, давно используем систему directum, но без обновлений. Текущая версия 5.0. Импорт пользователей из AD работал исправно, до недавнего момента. Был сбой. Сервер восстановил, но при импорте пользователя система не может его сгенерировать в sql. Выходит ошибка "группа или пользователь windows nt не существует SQL State 42000, SQL Error Code 15401". Стали разбираться почему не происходит добавления пользователя в SQL и вышли на то что причина в том что добавляются пользователи не домена, а локального компьютера. На sql выполняется запрос с котором в параметрах suser_sid ('локальный компьютер\testuser') и sp_grantlogin 'локальный компьютер\testuser', скорее всего тут должен быть домен, но не понятно почему система его не подставляет. Возможно где то должна прописываться константа? вы не могли бы помочь мне с этим вопросом?
Импорт пользователей из AD является очень важной задачкой, необходимая
для многих проектов, потому что многие компании поддерживают данное программное обеспечение. Ограничения, которые были раньше не позволяли использовать все возможности и полностью поддерживать актуальный список сотрудников компании. Сейчас данный функционал расширился и надеемся, что данный сценарий будет разрабатываться дальше и будет использоваться во многих проектах.
Дмитрий, спасибо за отзыв. Ваше мнение о разработанном решении очень важно для нас.
В данном случае, сценарий скорее всего сталкивается с проблемой подвязки пользователя к работнику (просто не находит соответствие имен).
Подвязка E-mail осуществляется к подвязанной записи работника. В связи с тем что, работник не подвязывается к пользователю, почтовый адрес не может быть записан.
В данном случае просто нужно адаптировать к вашим требованиям поиск соответствия имен в справочниках, и почтовые адреса будут корректно заносится в систему.
Извините, пожалуйста за глупый вопрос. Я начинающий "пользователь" системы директум. Утилита эта действительно очень необходима, особенно для крупным организаций. Я установила утлиту через импорт разработки. А где ее дальше искать?
Здравствуйте, Екатерина. В данном случае это не утилита, а сценарий системы DIRECTUM.
Искать данный сценарий следует в компоненте "Сценарии". Данная компонента расположена по следующему пути в проводнике системы:
"Компоненты->Утилиты разработчика->Сценарии"
Далее запустите эту компоненту и найдите в списке сценарий с заголовком "Импорт пользователей из Active Directory". Сценарий будет доступен для запуска или редактирования.
Также для удобства эксплуатации сценария можно настроить вариант запуска сценария в проводнике системы. О том как настроить вариант запуска в проводнике вы можете прочесть в справочном руководстве.
Спасибо огромное, Антон!
И еще, не поняла где настройки доступа к AD. в тексте сценария нужно что-то поменять, или это в другом месте?
Кроме импорта разработки, перед выполнением сценария потребуется заполнить значения следующих констант:
Константин, это сделала - пишет таблица не существует.
Вопрос в том, где указать путь к АД?
Настройки доступа к AD в тексте сценария задавать не нужно. При выполнении скрипта появится диалоговое окно с запросом параметров соединения с каталогом AD и параметрами импорта. Скрин этого окна представлен выше: первый по счету скрин статьи Антона.
А если в компании используется LDAP, то данный сценарий будет работать?
Попробовал использовать этот сценарий, у меня вот такая ошибка:
http://www.fast-screen.ru/screen_shooter/images/1300974179_13097.png
Роман, какие параметры запуска сценария использовали (какие флажки были включены, а какие нет)? Операционная система, версия системы DIRECTUM?
ОС компьютера клиента WIN XP SP3.
Версия: 4.7.0
IS-builder: Версия клиентской части: 7.8.3.1027
Версия серверной части: 7.8.3.1000
Галочки ставил: Привязать запись работника к пользователю и Импортировать E-mail.
Аналогичная проблема.
ОС Win 2008 R2
Как быть?
Может кому поможет:
Проблема решилась. По умолчанию все галочки неактивны (закрашены серым). После того, как просто вкл/выкл галочки, ошибка пропала.
Вот такая вот ошибка вылезла. В чем причина понять не могу. В параметрах выставляю галочки "Привязать пользователя", "Импортировать мыло" и "Импортировать группы". Кто то уже сталкивался с таким?
Коллеги, приветствую.
Антон, хотел обратить внимание, что в сценарии есть строка
DDS2.ISBCertificateType = CERTIFICATE_TYPE_SIGN
То есть получается, что всегда тип у сертификата "ЭЦП". В описании написано "Импортируются действующие сертификаты учетных записей каталога .... предназначенных для подписания и шифрования. "
И в ldap запросе нет проверок, для чего предназначен сертификат.
Добрый день, Антон!
Очень хороший и полезный сценарий, спасибо большое!
Есть пожелание - можно ли добавить в качестве параметра имя контейнера (ou)?
Если список пользователей очень большой, то выбирать из него не очень удобно, да и не дойдет до этого дело - сценарий отваливается по тайм-ауту, наверное, при опросе домена (домен очень крупный, и к тому же невозможно выполнять работы на контроллерах домена, а каналы не везде широкие).
(This operation returned because the timeout period expired. Сценарий "ADIU_ActiveDirectoryImport": ошибка в строке 204)
Добрый день, Антон!
Я внес небольшое изменение в сценарий "Импорт пользователей из Active Directory" - добавил в качестве параметра имя контейнера (OU). Не могу приложить к этому сообщению файл, если заинтересует - пишите.
Поле необязательное, если не заполнено, то сценарий работает, как и раньше. А если имя контейнера указано, то показывает выбор пользователей только из этого контейнера (и вложенных в него контейнеров).
Но есть одно ограничение - сам указываемый контейнер должен быть в домене на самом первом уровне вложенности.
Немного улучшил свой вариант сценария - снял ограничение по уровню контейнера.
Аналогичная ошибка как у Сергея Ершова чуть выше, и судя по строке в которой ошибка выходит ее разработчики изначально хотели не отображать (exceptionsOff - exceptionsOn):
ADIU_ImportUser() -> ADIU_UserCreate() -> 72 строка:
UsersMainView.Forms("Dfm").Actions.FindAction("GenerateUsersAction").Execute
В саппорте дали измененную функцию ADIU_UserCreate() - после этого удалось импортировать.
К материалу Антона прикрепили исправленную функцию. Ее импорт исправит возникающую ошибку
а пакет разработки остался с "кривой" функцией?
Сам пакет разработки - да. Необходимо отдельно импортировать также функцию, и все будет ок.
Используется поиск по группам безопасности или распространения?
Сценарий в версии 4,9 происходит с ошибкой на строчках начиная с 14, где вызывается функция "ФайлЗаписать". DIRECTUM виснет и сваливается.
Руслан, очень актуальный вопрос про ограничение импорта одним контейнером, тоже прошу прислать!
@Directum - давно пора реализовать этот функционал полноценно в продукте.
Руслан, не удается ввести нужный OU (ни в формате ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com ни в формате Legacy\Russia\Moscow\Users ) - места не хватает в поле для ввода значения поля. В каком формате правильно вводить, и можно ли просто захардкодить в сценарии нужный OU?
Дмитрий, нужно ввести просто наименование OU (то бишь его name). Сценарий сам выполняет поиск в AD по наименованию и получает его distinguishedName. Тут может быть подвох - я не уверен, но мне кажется, что могут быть разные OU с одинаковым name, тогда сценарий возьмет первый попавшийся.
"Тут может быть подвох - я не уверен, но мне кажется, что могут быть разные OU с одинаковым name, тогда сценарий возьмет первый попавшийся."
Да, это наш случай, есть повторяющиеся имена OU в домене. Значит, нам придется жестко вписать OU в код сценария.
"Этим хирургам лишь бы чего нибудь отрезать...". Темная сторона Вас так и манит :)
Как я понял из предыдущего поста, для Вас не проблема вводить имя OU в формате "ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com". Тогда просто сделайте в вызове InputDialog длину запрашиваемой строки побольше, и закомментируйте несколько строчек кода, где выполняется запрос к AD для поиска distinguishedName для заданного OU. Там еще переменной присваивается результат запроса, вместо этого присвойте ей то, что пользователь ввел в InputDialog (к сожалению, у меня сейчас под рукой нет текста сценария).
А еще лучше - добавить к запросу InputDialog еще один параметр, который будет определять, как сценарий интерпретирует введенную строку - как наименование или как distinguishedName, и в зависимости от этого выполнять или не выполнять поиск.
Здравствуйте, Руслан!
В Вашем видоизмененном сценарии используется ф-ция ADIU_ImportUser_New(),
но в выложенной разработке ее нет. Существует только ф-ция ADIU_ImportUser().
Возможно ли использовать ADIU_ImportUser()? Если нет, то где взять видоизмененную ф-цию ADIU_ImportUser_New()?
Подскажите пожалуйста, а как использовать вариант Руслана? В прикрепленном к статье файле "Версия Руслана Бапина", есть только xml файла.Процитировать выделенное
Нашел, прошу прощения :)
Могли бы вы мне тоже прислать исправленный сценарий? Он работает с последней версией? У меня пользователей импортирует, группы и почту нет.
Если вопрос ко мне, то моя версия сценария прикреплена к материалу. Больше я ничего не исправлял. Да, кстати, выше Natalie shevchenko сообщала, что в моем сценарии встречается вызов функции ADIU_ImportUser_New(), прошу прощения, это, видимо, следы каких-то моих опытов, можно просто заменить на вызов исходной функции ADIU_ImportUser()
Руслан, Добрый день, подскажите пожалуйста, давно используем систему directum, но без обновлений. Текущая версия 5.0. Импорт пользователей из AD работал исправно, до недавнего момента. Был сбой. Сервер восстановил, но при импорте пользователя система не может его сгенерировать в sql. Выходит ошибка "группа или пользователь windows nt не существует SQL State 42000, SQL Error Code 15401". Стали разбираться почему не происходит добавления пользователя в SQL и вышли на то что причина в том что добавляются пользователи не домена, а локального компьютера. На sql выполняется запрос с котором в параметрах suser_sid ('локальный компьютер\testuser') и sp_grantlogin 'локальный компьютер\testuser', скорее всего тут должен быть домен, но не понятно почему система его не подставляет. Возможно где то должна прописываться константа? вы не могли бы помочь мне с этим вопросом?
Василий, Лучше задайте свой вопрос в специальном разделе сайта, там вы с большей вероятностью сможете получить ответ - https://club.directum.ru/questions
Авторизуйтесь, чтобы написать комментарий