Изредка, в работе программистов и системных администраторов, возникают ситуации и задачи, когда необходимо произвести интеграцию 1С и Active Directory. В данном примере будет показано как с помощью технологии LDAP (англ. Lightweight Directory Access Protocol — «облегчённый протокол доступа к каталогам») и средств интеграции 1С, получить данные из Active Directory. Интеграция 1С и Active Directory может использоваться не только для получения данных, но и для создания объектов в структуре соответствующего домена.
В процессе создания алгоритма интеграции 1С и Active Directory, будет весьма полезна программа «Active Directory Explorer», создателем который является известный программист и писатель Марк Русси́нович. Данная программа позволит вам просмотреть дерево объектов выбранного вами домена, а если в начале запуска программы, сразу нажать кнопку «ОК», то домена по умолчанию, для текущего компьютера.
Далее приведен код процедуры, с помощью которого можно получить список групп домена, в определенном организационном блоке (OU):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| &НаКлиенте Процедура ПолучитьГруппыДомена() КомандаАДО = Новый COMОбъект( "ADODB.Command" ); СоединениеАДО = Новый COMОбъект( "ADODB.Connection" ); СоединениеАДО.Provider = "ADSDSOObject" ; Попытка СоединениеАДО.Open( "Active Directory Provider" ); Исключение Сообщить( "Ошибка при открытии Active Directory Provider: " + ОписаниеОшибки()); Возврат; КонецПопытки; КомандаАДО.ActiveConnection = СоединениеАДО; //Получаем имя домена к которому принадлежит данный компьютер Попытка Исключение Возврат; КонецПопытки; ТекущийДомен = RootDSE.Get( "defaultNamingContext" ); Сообщить( "ТекущийДомен: " + ТекущийДомен); //Подключаемся к текущему домену Попытка Исключение Возврат; КонецПопытки; ИмяДомена = ОбъектТекущегоДомена.dc; Сообщить( "ИмяДомена: " + ИмяДомена); //Формируем команду получения групп из блока Groups КомандаАДО.CommandText = "<LDAP://OU=Groups," + ТекущийДомен + ">" + ";(&(objectClass=top)(objectClass=organizationalUnit));name;onelevel" ; КомандаАДО.Properties( "Page Size" ).Value = 100; КомандаАДО.Properties( "Timeout" ).Value = 30; КомандаАДО.Properties( "Cache Results" ).Value = Ложь; Попытка ВыборкаАДО = КомандаАДО.Execute(); Исключение Сообщить( "Ошибка Execute(): " + ОписаниеОшибки()); Возврат; КонецПопытки; //Выводим список групп Пока НЕ ВыборкаАДО.EOF Цикл Сообщить( "Группа домена: " + ВыборкаАДО.Fields( "name" ).Value); ВыборкаАДО.MoveNext(); КонецЦикла; //Обязательно закрываем соединения и объекты ВыборкаАДО.Close(); СоединениеАДО.Close(); КонецПроцедуры |
Теперь получаем данные пользователей, которые включены в выбранную группу домена:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| &НаКлиенте Процедура ПолучитьПользователейГруппы() КомандаАДО = Новый COMОбъект( "ADODB.Command" ); СоединениеАДО = Новый COMОбъект( "ADODB.Connection" ); СоединениеАДО.Provider = "ADSDSOObject" ; Попытка СоединениеАДО.Open( "Active Directory Provider" ); Исключение Сообщить( "Ошибка при открытии Active Directory Provider: " + ОписаниеОшибки()); Возврат; КонецПопытки; КомандаАДО.ActiveConnection = СоединениеАДО; Попытка Исключение Возврат; КонецПопытки; ТекущийДомен = RootDSE.Get( "defaultNamingContext" ); Сообщить( "ТекущийДомен: " + ТекущийДомен); Попытка Исключение Возврат; КонецПопытки; ИмяДомена = ОбъектТекущегоДомена.dc; Сообщить( "ИмяДомена: " + ИмяДомена); КомандаАДО.CommandText = "<LDAP://OU=" + ГруппыДомена + ",OU=Groups," + Объект.ТекущийДомен + ">" + ";(&(objectCategory=person)(objectClass=user));sAMAccountName,userAccountControl,displayName,department,mail,telephoneNumber;onelevel" ; КомандаАДО.Properties( "Page Size" ).Value = 100; КомандаАДО.Properties( "Timeout" ).Value = 30; КомандаАДО.Properties( "Cache Results" ).Value = Ложь; Попытка ВыборкаАДО = КомандаАДО.Execute(); Исключение Сообщить( "Ошибка Execute(): " + ОписаниеОшибки()); Возврат; КонецПопытки; Пока НЕ ВыборкаАДО.EOF Цикл ПользовательДомена = Новый Структура; Если ВыборкаАДО.Fields( "userAccountControl" ).Value = 514 ИЛИ ВыборкаАДО.Fields( "userAccountControl" ).Value = 546 ИЛИ ВыборкаАДО.Fields( "userAccountControl" ).Value = 66050 Тогда Сообщить( "Заблокирован" ); Иначе Сообщить( "НеЗаблокирован" ); КонецЕсли; Сообщить( "ИмяПользователя " + СокрЛП(ВыборкаАДО.Fields( "displayName" ).Value)); Сообщить( "ИмяАккаунта " + СокрЛП(ВыборкаАДО.Fields( "sAMAccountName" ).Value)); Сообщить( "Подразделение " + СокрЛП(ВыборкаАДО.Fields( "department" ).Value)); Сообщить( "Почта " + СокрЛП(ВыборкаАДО.Fields( "mail" ).Value)); Сообщить( "Телефон " + СокрЛП(ВыборкаАДО.Fields( "telephoneNumber" ).Value)); ВыборкаАДО.MoveNext(); КонецЦикла; ВыборкаАДО.Close(); СоединениеАДО.Close(); КонецПроцедуры |
По этому примеру можно создавать более сложные примеры интеграции 1С и Active Directory, более подробные сведения, вы можете получить по следующим адресам:
ADSI LDAP Provider
Использование протокола LDAP в скриптах
Источник: здесьADSI LDAP Provider
Использование протокола LDAP в скриптах
Комментариев нет:
Отправить комментарий