gifts2017

Атрибуты объектов в Active Directory

Опубликовал Максим (Fuego) в раздел Программирование - Инструментарий

Написал справочник Внутренних телефонов компании, и посыпались вопросы: "а как, а где"... Вот и решил выложить небольшой скриптик, который во многом объясняет структуру AD. Распросраняется "AS IS", ни за чё не отвечаю...



Перем мТипы;

Процедура КнопкаВыполнитьНажатие(Кнопка)
 
 АДОКоннектор = Новый COMОбъект("ADODB.Connection");
 АДОКоннектор.ConnectionString = "Provider=""ADsDSOObject""";
 АДОКоннектор.Open();

 КореньDSE = ПолучитьCOMОбъект("LDAP://RootDSE");

 ДоменDNS = КореньDSE.Get("defaultNamingContext");
 
 ТекстЗапроса = "select AdsPath from 'LDAP://"+ДоменDNS+"'";

 ВыборкаАДО = АДОКоннектор.Execute(ТекстЗапроса);

 Пока НЕ ВыборкаАДО.EOF Цикл

  ПутьОбъекта = ВыборкаАДО.Fields("AdsPath").Value;
  
  Сообщить("Объект: " + ПутьОбъекта);
  Сообщить("---------------");
  Попытка
   СписокАтрибутов = ПолучитьCOMОбъект(ПутьОбъекта);
         СписокАтрибутов.GetInfo();

   КоличествоАтрибутов = СписокАтрибутов.PropertyCount;

   Для инд = 0 По КоличествоАтрибутов - 1 Цикл
    Атрибут = СписокАтрибутов.item(инд);
    Сообщить("Значения атрибута: "+ Атрибут.Name+":");
    
    Для Каждого Значение Из Атрибут.Values Цикл
     ТекстЗначения = Значение.GetObjectProperty(Значение.ADsType);
     ТипЗначения = мТипы[Значение.ADsType];
     Сообщить(ТипЗначения + ": "+ТекстЗначения);
     ОбработкаПрерыванияПользователя();
    КонецЦикла;
    
    Сообщить(Символы.ПС);
   КонецЦикла;
  Исключение
   Сообщить("");
  КонецПопытки;
  
  ВыборкаАДО.MoveNext();
 КонецЦикла;
 ВыборкаАДО.Close();
 АДОКоннектор.Close();
 
КонецПроцедуры

мТипы = Новый Соответствие;
мТипы.Вставить(0, "ADSTYPE_INVALID");
мТипы.Вставить(1, "ADSTYPE_DN_STRING");
мТипы.Вставить(2, "ADSTYPE_CASE_EXACT_STRING");
мТипы.Вставить(3, "ADSTYPE_CASE_IGNORE_STRING");
мТипы.Вставить(4, "ADSTYPE_PRINTABLE_STRING");
мТипы.Вставить(5, "ADSTYPE_NUMERIC_STRING");
мТипы.Вставить(6, "ADSTYPE_BOOLEAN");
мТипы.Вставить(7, "ADSTYPE_INTEGER");
мТипы.Вставить(8, "ADSTYPE_OCTET_STRING");
мТипы.Вставить(9, "ADSTYPE_UTC_TIME");
мТипы.Вставить(10, "ADSTYPE_LARGE_INTEGER");
мТипы.Вставить(11, "ADSTYPE_PROV_SPECIFIC");
мТипы.Вставить(12, "ADSTYPE_OBJECT_CLASS");
мТипы.Вставить(13, "ADSTYPE_CASEIGNORE_LIST");
мТипы.Вставить(14, "ADSTYPE_OCTET_LIST");
мТипы.Вставить(15, "ADSTYPE_PATH");
мТипы.Вставить(16, "ADSTYPE_POSTALADDRESS");
мТипы.Вставить(17, "ADSTYPE_TIMESTAMP");
мТипы.Вставить(18, "ADSTYPE_BACKLINK");
мТипы.Вставить(19, "ADSTYPE_TYPEDNAME");
мТипы.Вставить(20, "ADSTYPE_HOLD");
мТипы.Вставить(21, "ADSTYPE_NETADDRESS");
мТипы.Вставить(22, "ADSTYPE_REPLICAPOINTER");
мТипы.Вставить(23, "ADSTYPE_FAXNUMBER");
мТипы.Вставить(24, "ADSTYPE_EMAIL");
мТипы.Вставить(25, "ADSTYPE_NT_SECURITY_DESCRIPTOR");
мТипы.Вставить(26, "ADSTYPE_UNKNOWN");
мТипы.Вставить(27, "ADSTYPE_DN_WITH_BINARY");
мТипы.Вставить(28, "ADSTYPE_DN_WITH_STRING");

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Максим (Fuego) 30.09.09 13:32
Перем мТипы;

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
	АДОКоннектор = Новый COMОбъект("ADODB.Connection");
	АДОКоннектор.ConnectionString = "Provider=""ADsDSOObject""";
	АДОКоннектор.Open();

	КореньDSE = ПолучитьCOMОбъект("LDAP://RootDSE");

	ДоменDNS = КореньDSE.Get("defaultNamingContext");
	
	ТекстЗапроса = "sel ect AdsPath from 'LDAP://"+ДоменDNS+"'";

	ВыборкаАДО = АДОКоннектор.Execute(ТекстЗапроса);

	Пока НЕ ВыборкаАДО.EOF Цикл

		ПутьОбъекта = ВыборкаАДО.Fields("AdsPath").Value;
		
		Сообщить("Объект: " + ПутьОбъекта);
		Сообщить("---------------");
		Попытка
			СписокАтрибутов = ПолучитьCOMОбъект(ПутьОбъекта);
	        СписокАтрибутов.GetInfo();

			КоличествоАтрибутов = СписокАтрибутов.PropertyCount;

			Для инд = 0 По КоличествоАтрибутов - 1 Цикл
				Атрибут = СписокАтрибутов.item(инд);
				Сообщить("Значения атрибута: "+ Атрибут.Name+":");
				
				Для Каждого Значение Из Атрибут.Values Цикл
					ТекстЗначения = Значение.GetObjectProperty(Значение.ADsType);
					ТипЗначения = мТипы[Значение.ADsType];
					Сообщить(ТипЗначения + ": "+ТекстЗначения);
					ОбработкаПрерыванияПользователя();
				КонецЦикла;
				
				Сообщить(Символы.ПС);
			КонецЦикла;
		Исключение
			Сообщить("<не удалось получить свойства>");
		КонецПопытки;
		
		ВыборкаАДО.MoveNext();
	КонецЦикла;
	ВыборкаАДО.Close();
	АДОКоннектор.Close();
	
КонецПроцедуры

мТипы = Новый Соответствие;
мТипы.Вставить(0, "ADSTYPE_INVALID");
мТипы.Вставить(1, "ADSTYPE_DN_STRING");
мТипы.Вставить(2, "ADSTYPE_CASE_EXACT_STRING");
мТипы.Вставить(3, "ADSTYPE_CASE_IGNORE_STRING");
мТипы.Вставить(4, "ADSTYPE_PRINTABLE_STRING");
мТипы.Вставить(5, "ADSTYPE_NUMERIC_STRING");
мТипы.Вставить(6, "ADSTYPE_BOOLEAN");
мТипы.Вставить(7, "ADSTYPE_INTEGER");
мТипы.Вставить(8, "ADSTYPE_OCTET_STRING");
мТипы.Вставить(9, "ADSTYPE_UTC_TIME");
мТипы.Вставить(10, "ADSTYPE_LARGE_INTEGER");
мТипы.Вставить(11, "ADSTYPE_PROV_SPECIFIC");
мТипы.Вставить(12, "ADSTYPE_OBJECT_CLASS");
мТипы.Вставить(13, "ADSTYPE_CASEIGNORE_LIST");
мТипы.Вставить(14, "ADSTYPE_OCTET_LIST");
мТипы.Вставить(15, "ADSTYPE_PATH");
мТипы.Вставить(16, "ADSTYPE_POSTALADDRESS");
мТипы.Вставить(17, "ADSTYPE_TIMESTAMP");
мТипы.Вставить(18, "ADSTYPE_BACKLINK");
мТипы.Вставить(19, "ADSTYPE_TYPEDNAME");
мТипы.Вставить(20, "ADSTYPE_HOLD");
мТипы.Вставить(21, "ADSTYPE_NETADDRESS");
мТипы.Вставить(22, "ADSTYPE_REPLICAPOINTER");
мТипы.Вставить(23, "ADSTYPE_FAXNUMBER");
мТипы.Вставить(24, "ADSTYPE_EMAIL");
мТипы.Вставить(25, "ADSTYPE_NT_SECURITY_DESCRIPTOR");
мТипы.Вставить(26, "ADSTYPE_UNKNOWN");
мТипы.Вставить(27, "ADSTYPE_DN_WITH_BINARY");
мТипы.Вставить(28, "ADSTYPE_DN_WITH_STRING");
...Показать Скрыть
soda; alex4x; swiftblack; +3 Ответить
2. Дмитрий Воробьев (vde69) 01.10.09 13:48
я не понимаю, как за 1 день получить 12 плюсов???

у меня статья и больше и функционала больше и лежит уже месяц и плюсов всего 7, что я не так делаю??? может надо тупо накручивать плюсы самому?
3. Андрей Скляров (coder1cv8) 01.10.09 15:22
(2) дались тебе эти плюсы? )
4. Дмитрий Воробьев (vde69) 01.10.09 16:08
(3) мне на плюсы пофигу, ;)

просто действительно интересно как такое получается, заметил уже не первый раз, что как-то очень не понятно лидеры на первой странице появляются, ну всегда списывал на то, что я чего-то не понимаю в психологии, а тут сравнить можно (больно показательный пример)...

5. AntiDot (kurator1C) 02.10.09 07:24
(2) Кинь ссылку здесь на свою статью.
И тот, кто плюсанул здесь, плюсанет и тебя, раз уж ему эта тема интересна, а ты её раскрыл более полно.
6. Дмитрий Воробьев (vde69) 02.10.09 09:30
(5) дело не в плюсах, и кидать ссылку сюда как-то некрасиво. Меня интересуют мнения первых 10 отплюсовавших как они так быстро загнали разработку на первую страницу!

это вопрос или психологии или технологиии раскрутки, меня интересует этот вопрос исключительно с этой точки зрения... может автор пиарит ее где-то на форумах или это его знакомые или еще чего? мой интерес это выяснить скорее идет в рамки моего web проекта как пример удачной стратегии.

Fuego - не ругай меня сильно я плюсану ее за пропаганду интеграции ;)

7. Максим (Fuego) 02.10.09 12:05
(6) Привет. На самом деле я недавно столкнулся с проблемой. Пользователи 1С звонят мне и спрашивают, почему, мол, в телефонном справочнике в 1С-ке не указан номер того-то и того-то... АТС-кой у нас распоряжается инженер ИТО, а в АД у нас распоряжается сисадмин. Т.е. телефон в АТС заведен, сисадмин не в курсе и т.д. И тут я решил читок подправить запрос, и вывести обработочку инженеру ИТО, чтобы он мог сформировать список сотрудников, на которых не указан номер телефона в АД. Список распечатывается, он вписывает номера из АТС-ки и отдает сисадмину. И поскольку я вернулся к теме АД, я впомнил, что встречались вопросы. И решил написать обработку несколько глубже. Лично мне нафиг не нужно подробное описание структуры АД. (Когда мне что-то нужно сделать, я зачастую разрабытваю схему с нуля.) А кому-то пригодится. У меня всегда под рукой справочные системы, но как правило они на английском языке. Сел, покумекал, прикинул, проверил. И вот - работает. Если посмотреть на мою активность на сайте, то можно понять, что я тут нынче редкий гость. И рейтинг мне ничего не даёт. Я не фрилансер, и мне не нужно показывать клиенту, как мои разработки "любят" в интернете. Я считаю этот сайт плацдармом для обмена опытом разработчиков на платформе 1С. А ссылочку свою оставь здесь, это не зазорно :)
8. rasswet (rasswet) 05.10.09 09:59
можно поподробнее что это такое? подключается к какому-то файлу и оттуда тащит данные?
9. Максим (Fuego) 14.10.09 13:23
(8) Active Directory - это интеллектуальная служба каталогов для операционных систем семейства Windows NT). Active Directory имеет иерархическую структуру, состоящую из объектов. Объекты разделяются на три основные категории: ресурсы (например принтеры), службы (например, электронная почта) и люди (учётные записи пользователей и групп пользователей). Active Directory предоставляет информацию об объектах, позволяет организовывать объекты, управлять доступом к ним, а также устанавливает правила безопасности.
10. Aлeкceй (alex4x) 28.10.09 16:44
что то у меня руки кривые стали...

Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Provider): One or more errors occurred during processing of command.
   ВыборкаАДО = АДОКоннектор.Execute(ТекстЗапроса); 
по причине:
Произошла исключительная ситуация (Provider): One or more errors occurred during processing of command.


Как понять, что
КореньDSE = ПолучитьCOMОбъект("LDAP://RootDSE");
ДоменDNS = КореньDSE.Get("defaultNamingContext");
Вернули правильную информацию ?

Кстати про принтеры, компьютеры и все остальное - тоже было б полезно из AD прочитать всё. Может есть мануал по AD ?
11. Евгений Ю. (Ganjubas) 13.11.09 15:40
(10) в приведенном автором примере, в строке
ТекстЗапроса = "sel ect AdsPath from 'LDAP://"+ДоменDNS+"'";
опечатка (выделил цветом), должно быть не "sel ect" , а "select", т.е. без пробела. после исправления - всё замечательно работает.
Автору +ище!!
12. Максим (Fuego) 13.11.09 16:59
(11) Это не опечатка. Все зарезервированные слова языка запросов SQL (update, select, delete, insert и т.д.) рвутся движком в целях безопасности. Я уверен, что сейчас нажму кнопку "Ответить" и все слова в скобкам разорвутся.
13. Максим (Fuego) 13.11.09 17:00
Странно... А раньше я не мог убрать этот пробел. Скорее всего что-то изменили в поведении движка сайта.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа