gifts2017

Adaptersoft : Пакетное создание пользователей

Опубликовал Adapter Бахтыреев (adapter) в раздел Администрирование - Сервисные утилиты

обработка для пакетного создания пользователей в 1С и в ActiveDirectory. На универсальность не претендую, делал под задачу, но вроде должна работать и в типовых конфигурациях.

Может брать список из Екселя. Поля подхватываются по наименованию, диапазон задавать не надо - сам найдет.

В AD пользователи создаются через провайдер LDAP (ADSI).

Если в 1С задавать аутентификацию ОС, то сначала запустите с галкой "Создать в терминале", а потом второй раз с галкой "создать в 1С". Потому что пакетом юзвери в AD создаются медленно и поэтому не сразу находятся.

При повторном запуске пользователи пересоздаются. И в AD и в 1С.

 


Обработка устарела, вернее выросла в конфигурацию ServiceDesk1C

 

 

 

 

Скачать файлы

Наименование Файл Версия Размер
СоздатьПользователейПакет.epf 311
.1229511331 14,42Kb
27.05.14
311
.1229511331 14,42Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. GSoft. (GSoft) 17.12.08 14:28
2. Максим (Fuego) 17.12.08 14:29
RostovoblgazService - А это зачем? :)
3. AdApter (adapter) 17.12.08 14:34
(1) LDAP думаю можно и на 7.7. поюзать, Ексель тоже. А вот создать юзверей в конфигураторе не выйдет.

(2) это название группы в моем AD. Если у вас все в корне - оставьте пустым
4. Аркадий Кучер (Abadonna) 17.12.08 14:53
(3) 7.7. поюзать, Ексель тоже. А вот создать юзверей в конфигураторе не выйдет.
В 7.7 юзвери в конфигураторе (вернее, в конфигурации) никогда и не создавались. А для тех, кто знает структуру users.usr, насоздавать юзверей - как два байта отослать ;)
5. Максим (Fuego) 17.12.08 15:15
Код
Процедура СоздатьПользователя(Имя, Аккаунт, НачальныйПароль)

   ADS_UF_NORMAL_ACCOUNT = 512; 

   Попытка
      DSE = ПолучитьCOMОбъект("LDAP://rootDSE");
      
       мПользователи = ПолучитьCOMОбъект("LDAP://CN=Users," +  DSE.Get("defaultNamingContext"));
                         
       мНовыйПользователь = мПользователи.Create("user", "CN=" + Имя); 
         
       мНовыйПользователь.Put("sAMAccountName", Аккаунт);

       мНовыйПользователь.SetInfo(); 
 
       мНовыйПользователь.SetPassword(НачальныйПароль);
 
       мНовыйПользователь.Put("pwdLastSet", 0);

      мНовыйПользователь.Put("userAccountControl", ADS_UF_NORMAL_ACCOUNT);
      
       мНовыйПользователь.SetInfo();
   Исключение
      Сообщить(ОписаниеОшибки());
   КонецПопытки;
КонецПроцедуры
Показать полностью
6. Максим (Fuego) 17.12.08 15:48
И в догонку ещё одну процедурку:

Код
Процедура СоздатьПользователя_в_1С_с_АутентификациейОС(ИмяУчетнойЗаписи, Аккаунт)
   Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяУчетнойЗаписи);
   Если Пользователь <> Неопределено Тогда
      Если Пользователь.АутентификацияОС И Пользователь.ПользовательОС = Аккаунт Тогда
         Сообщить("Пользователь «"+ИмяУчетнойЗаписи+"» уже существует и имеет аутентификацию ОС");
         Возврат;
      КонецЕсли;
   Иначе
      Пользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
   КонецЕсли;
   Пользователь.АутентификацияОС = Истина;
   Пользователь.ПользовательОС = Аккаунт;
   Пользователь.Имя = ИмяУчетнойЗаписи;
   Пользователь.ПолноеИмя = ИмяУчетнойЗаписи;
   Попытка
       Пользователь.Записать();
   Исключение
      Сообщить(ОписаниеОшибки());
   КонецПопытки;
КонецПроцедуры
Показать полностью
7. sound_kurgan (sound) 18.12.08 07:37
А чтоб самому не париться с users.usr и "байты не отсылать", можно как вариант
для создания юзверей в 7-ке UsersDef.dll поюзать, так еще прошу будет
8. sound_kurgan (sound) 18.12.08 07:52
Извиняюсь, хотел написать "так еще проще будет"

ЗЫ: еще б уж тогда до кучи добавить чтоб у этих же юзеров заодно и почта на exchange прописывалась, чтоб админы ваще не работали :)
9. kgw (kgw@list.ru) 18.12.08 09:23
Подскажите, а если нет домена тогда как?
10. AdApter (adapter) 18.12.08 12:14
через LDAP можно и локальных пользователей создавать. В мануале по ADSI описано. Выложить?
11. Ivan (Zlodey) 18.12.08 13:11
В Висте 64 бита не работает, ругается:
{Форма.Форма(218)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Указанный домен не существует или к нему невозможно подключиться.
objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");

//домен для авторизации ОС
objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE"); ---- вот тут
strDC = objRootLDAP.Get("defaultNamingContext"); //получаем имя домена формата LDAP
Домен = СтрЗаменить(strDC, ",DC=ru", "\");
Домен = СтрЗаменить(Домен, "DC=", "\\");
12. AdApter (adapter) 18.12.08 14:48
видимо дело не в Висте, а в том что у вас домена нет
13. Sashka (BaronDevil) 27.01.09 10:56
Выложите пожалуйста обработку с учетом того что нет домена. Большое спасибо)
14. Евгений Яцковский (Jacki) 12.01.10 17:00
а можно поподробнее объяснить следующий момент:
// для работы в AD от имени другого пользователя, не текущего
//Set objContainer = objRootLDAP.OpenDSObject("LDAP://" + strOU + strDC, "admin", "пароль", 0)

не понял как это использовать :oops:
если просто вставлять в код
strOU = "Admins";
strDC = "DC=test,DC=lan";
objRootLDAP = ПолучитьCOMОбъект("LDAP://" + strDC);
Set objContainer = objRootLDAP.OpenDSObject("LDAP://" + strOU + strDC, "admin", "123", 0);

то выдаётся сообщение об ошибке "Неопознанный оператор SET <<?>>objContainer"
если без SET:
strOU = "Admins";
strDC = "DC=test,DC=lan";
objRootLDAP = ПолучитьCOMОбъект("LDAP://" + strDC);
objContainer = objRootLDAP.OpenDSObject("LDAP://" + strOU + strDC, "admin", "123", 0);

то ругается "Метод объекта не обнаружен (OpenDSObject)"
Заранее спасибо!
15. AdApter (adapter) 12.01.10 23:34
я конечно структуры ваших доменов не знаю, но думаю что вы напутали в этой строчке:
strDC = "DC=test,DC=lan";

посмотрите как вам возвращается ваш домен по умолчанию в
objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE")
16. Евгений Яцковский (Jacki) 13.01.10 00:41
objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE");
strDC = objRootLDAP.Get("defaultNamingContext");

strDC = "DC=test,DC=lan"
сам домен имеет вид test.lan
17. Евгений Яцковский (Jacki) 15.01.10 11:58
разобрался, чтобы получить доступ от имени другого пользователя
SuperUser = "admin";
SuperUserPWD = "123";
strOU = "OU=Admins,";
objRootLDAP = ПолучитьCOMОбъект("LDAP://rootDSE"); 
strDC = objRootLDAP.Get("defaultNamingContext");
DS = ПолучитьCOMОбъект("LDAP:");		
objContainer = DS.OpenDSObject("LDAP://" + strOU + strDC, SuperUser, SuperUserPwd, 0);
...Показать Скрыть

ещё раз спасибо за обработку и помощь! ;)
18. AdApter (adapter) 04.08.10 11:38
обработка устарела. с конца 2008 года (когда я ее выкладывал) уже много воды утекло. переписал прилично, так что список изменений уже и весь не воспроизведу. Теперь обработка на 8.2 и в составе конфигурации ServiceDesk1С. На демке этот модуль кажется открыт - смотрите, колупайте кому надо.

На вскидку:
- может работать без домена (кто то просил)
- определяет права и группы из АД. Можно по умолчанию настроить для каждой базы или потом докинуть прав существующим пользователям AD
- расширенный поиск по АД - (по логину, части ФИО и пр.)
- все переписано под библиотеку универсальных запросов к AD (в составе конфы)
- может интегрироваться с любым сервисом, в том числе и не 1С. Процесс автоматизирован

Ну и впринципе сама обработка практических задач решает мало. Надо базу, чтоб хранила настройки, созданные учетки, управляла ими и пр. Ну собсно потому и ServiceDesk.

А обработка - просто пример кода, "кирпичик"
19. Евгений Яцковский (Jacki) 03.09.10 14:15
(18) При попытке создать пользователя спотыкаюсь на установке пароля для пользователя
{Обработка.СозданиеПользователей.Форма.Форма.Форма(417)}: Ошибка при вызове метода контекста (SetPassword)
objUser.SetPassword(strPWD);
по причине:
Произошла исключительная ситуация (0x80072030)

учётка админа под которой создаётся учётная запись все необходимые права имеет, без пароля всё остальное создаётся на ура
пароль соответствует политике безопасности
objUser.userAccountControl = 65536;
objUser.pwdLastSet = 0;
strPWD = "7EdfmR!";
objUser.SetPassword(strPWD);

как думаете - в чём могут быть грабли?

P.S.: на 8.1 то же самое возвращает такую ошибку
{Форма.Форма(392)}: Ошибка при вызове метода контекста (SetPassword): Произошла исключительная ситуация (Active Directory): Один или более входных параметров неправильны

objUser.SetPassword(strPWD);
по причине:
Произошла исключительная ситуация (Active Directory): Один или более входных параметров неправильны
20. Евгений Яцковский (Jacki) 03.09.10 17:04
После многочисленных прогонов открылся интересный нюанс - с вероятностью 1/15 - 1/20 пароль таки задаётся...
Определённо проблемы на контроллере домена.
21. Maksim (Massimo) 22.12.11 12:17
Спасибо за обработку, пригадилась
22. Гость 20.02.12 10:25
Спасибо за обработку, пригодилась