Каталог решений - Интеграция 1С и Active Directory на сервере

Интеграция 1С и Active Directory на сервере

Интеграция 1С и Active Directory на сервере

В наличии

Получить информацию Active Directory на управляемых формах со стороны сервера, под любым пользователем домена.

Категория:

Описание

Предлагаю вам рассмотреть возможность получения информации из Active Directory на стороне сервера. 

&НаСервере
Функция ПолучитьИнформациюActiveDirectoryНаСервере(пИмяДомена, пПользователь, пПароль, пУсловияОтбора)
	Перем Пользователь,Пароль,Домен,Стр,Контроллер,Отбор,Подразделение,Группа;
	
	//ADsPath,Name,Mail,telephoneNumber,displayName,sAMAccountName,department
	СтрКолонок = Новый Структура("ADsPath,sn,givenName,Name,Mail,telephoneNumber,displayName,sAMAccountName,department,userPrincipalName");
    ТаблицаРезультат = Новый ТаблицаЗначений;
	Для Каждого СтрКол Из СтрКолонок Цикл 
		ТаблицаРезультат.Колонки.Добавить(СтрКол.Ключ, Новый ОписаниеТипов("Строка"));
	КонецЦикла;
	ТаблицаРезультат.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("АутентификацияОС", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("Фамилия", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("Отчество", Новый ОписаниеТипов("Строка"));
	
	ТаблицаРезультат.Колонки.Добавить("Служебный", Новый ОписаниеТипов("Булево"));
	ТаблицаРезультат.Колонки.Добавить("ДоменWINS", Новый ОписаниеТипов("Строка"));
	ТаблицаРезультат.Колонки.Добавить("ДоменDNS", Новый ОписаниеТипов("Строка"));
	
	
	AD_Domain_DC = пИмяДомена;   //Имя домена - Перед (Windows 2000), Имя WINS
	//Домен="....................";    //Каноническое имя домена, Имя DNS
	
	Пользователь = пПользователь;
	Пароль		 = пПароль;
	
    АДСИ = Новый COMОбъект("ADSystemInfo");
    Домен = АДСИ.DomainDNSName;		   //Каноническое имя домена, Имя DNS
	
	//Но на самом деле хватит и обычного пользователя домена
    //Пользователь="администратор@" + Домен;
    //Пароль="СуперпарольАдминистратора";

    ДСО = ПолучитьCOMОбъект("GC:");
    Корень = ДСО.OpenDSObject("GC://RootDSE", ""+Пользователь+"@"+Домен, Пароль,1);
	
	НашДомен = Корень.Get("defaultNamingContext");
	
	ЗаписьАДО = Новый COMОбъект("ADODB.recordset");
	СоединениеАДО = Новый COMОбъект("ADODB.Connection");
	СоединениеАДО.Provider = "ADsDSOObject"; 
	
	ADS_SECURE_AUTHENTICATION = 1;     // Позволяет читать данные, когда не разрешен анонимный доступ 
	
	СоединениеАДО.Properties("User ID"  ).Value = AD_Domain_DC+"\"+Пользователь;
	СоединениеАДО.Properties("Password" ).Value = Пароль;
	СоединениеАДО.Properties("ADSI Flag").Value = ADS_SECURE_AUTHENTICATION;
	
	СоединениеАДО.Open("ADs Provider");
	
	Если пУсловияОтбора = 1 Тогда
		//Все пользователи, кроме отключенных
		ТектсУсловияОтбора = "(!useraccountcontrol:1.2.840.113556.1.4.803:=2)";
		
	ИначеЕсли пУсловияОтбора = 2 Тогда
		//Только отключенные пользователи
		ТектсУсловияОтбора = "(useraccountcontrol:1.2.840.113556.1.4.803:=2)";
		
	Иначе 
		//Все пользователи...
		ТектсУсловияОтбора = "";
	КонецЕсли;
	
	ПоляЗапроса = "ADsPath,sn,givenName,Name,Mail,telephoneNumber,displayName,sAMAccountName,department,userPrincipalName";
	ЗаписьАДО.Open("<GC://" + СокрЛП(НашДомен) + ">;(&(objectCategory=person)(objectClass=user)"+ТектсУсловияОтбора+"); "+ПоляЗапроса+" ;subtree", СоединениеАДО, 0, 1);
	
	
	//ADsPath,Name,Mail,telephoneNumber,displayName,sAMAccountName,department
	//Сообщить("ИмяПользователя " + СокрЛП(ВыборкаАДО.Fields("displayName").Value));
	//Сообщить("ИмяАккаунта "     + СокрЛП(ВыборкаАДО.Fields("sAMAccountName").Value));
	//Сообщить("Подразделение "   + СокрЛП(ВыборкаАДО.Fields("department").Value));
	//Сообщить("Почта "           + СокрЛП(ВыборкаАДО.Fields("mail").Value));
	//Сообщить("Телефон "         + СокрЛП(ВыборкаАДО.Fields("telephoneNumber").Value));
	
	Если ЗаписьАДО.RecordCount > 0 Тогда
		Пока Не ЗаписьАДО.EOF Цикл
			
			Для Каждого СтрКол Из СтрКолонок Цикл 
				СтрКолонок[СтрКол.Ключ] = ЗаписьАДО.Fields(СтрКол.Ключ).Value;
			КонецЦикла;
			
			НоваяСтрока = ТаблицаРезультат.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрКолонок);
			Если НЕ ПустаяСтрока(НоваяСтрока.userPrincipalName) Тогда 
				НоваяСтрока.АутентификацияОС = "\\"+AD_Domain_DC+"\"+НоваяСтрока.sAMAccountName;
			КонецЕсли;
			
			//Наименование
			НоваяСтрока.Наименование = СокрЛП(НоваяСтрока.displayName);
			Если ПустаяСтрока(НоваяСтрока.Наименование) Тогда 
				НоваяСтрока.Наименование = СокрЛП(НоваяСтрока.Name);
			КонецЕсли;
			
			//Отчество
			НоваяСтрока.Фамилия	 = СокрЛП(НоваяСтрока.sn);
			НоваяСтрока.Имя		 = СокрЛП(НоваяСтрока.givenName);
			НовоеИмя = "";
			НоваяСтрока.Отчество = ПолучитьОтчествоИзАД(НоваяСтрока.sn, НоваяСтрока.givenName, НоваяСтрока.Name, НовоеИмя);
			Если НЕ ПустаяСтрока(НовоеИмя) Тогда
				НоваяСтрока.Имя	 = НовоеИмя;
			КонецЕсли;
			
			НоваяСтрока.Служебный = ПустаяСтрока(НоваяСтрока.userPrincipalName);
			НоваяСтрока.ДоменWINS = AD_Domain_DC;
			НоваяСтрока.ДоменDNS  = Домен;
	
			Попытка
				ЗаписьАДО.MoveNext();
			Исключение
				Прервать;
			КонецПопытки;
			
		КонецЦикла;
	КонецЕсли;
	
	ЗаписьАДО.Close();
	ЗаписьАДО = Неопределено;
	СоединениеАДО.Close();
	СоединениеАДО = Неопределено;
	
	
	Возврат ТаблицаРезультат; 
КонецФункции

 

 

has been added to your cart:
Оформление заказа