Имя: Пароль:
1C
1С v8
Active Directory. Состав групп рассылок.
,
0 Aloex
 
14.07.11
14:47
Господа необходима подсказка.
Как добыть состав группы рассылки из ActiveDirectory (внутри сети)(Win)?
Пример есть группа рассылки: 1С@qwerty.tw в неё входят 2С@qwerty.tw и 3С@qwerty.tw
Нужен скрипт для разворота группы рассылки.
1 smaharbA
 
14.07.11
14:55
ищи тут
2 Aloex
 
14.07.11
15:04
Ап.
3 Aloex
 
14.07.11
15:07
Работа с пользователями есть, с почтовыми группами не нашел.
4 Aloex
 
14.07.11
15:32
Help.
5 Aloex
 
14.07.11
16:16
Ап
6 smaharbA
 
14.07.11
16:51
без разницы с чем работать, можно вообще отстраненно, не зная ни единого имени и опций свойств и объектов
7 Aloex
 
14.07.11
16:53
(6) как??? пните в нужном направление.
8 smaharbA
 
14.07.11
16:57
речь так понимаю о группе распространения и рекурсивном сборе всех адресов ?
9 Aloex
 
14.07.11
16:58
(8) верно, можно даже упростить задачу, проверить адрес на вхождение в группу(группа известна).
10 smaharbA
 
14.07.11
17:51
Так пойдет (через лдап), авторизацию выкинешь и рекурсию сам распишешь ?

Функция ПолучитьCOMОбъект(Путь="")
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Возврат Скрипт.Eval("this").GetObject(Путь);
КонецФункции    // Получить_COMОбъект(Путь="")
//*******************************************
Процедура Сформировать()
   Перем Пользователь,Пароль,Домен,Стр,Контроллер,Отбор;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Скрипт.Eval("
   |Перечисление=function(x){return new Enumerator(x)}
   |МассивОбъекта=function(x,y){return new VBArray(x.Get(y.Name))}
   |ТипЗначенияСтр=function(x){return typeof(x)}
   |ТипОбъектаСтр=function(x,y){return typeof(x.Get(y.Name))}
   |");
   Это=Скрипт.Eval("this");

   ТЗ=СоздатьОбъект("ТаблицаЗначений");
   Пользователь="администратор@avangard.karat-e.ru";
   Пароль="СуперПароль";
   ДСО=ПолучитьCOMОбъект("LDAP:");
   Корень=ДСО.OpenDSObject("LDAP://RootDSE", Пользователь, Пароль,1);
   ТекстЗапроса="<LDAP://"+Контроллер;
   Если ПустоеЗначение(Домен)=0 Тогда
       Провайдер="Provider=ADSDSOObject;User Id="+Пользователь+"@"+Домен+";Password="+Пароль;
       ТекстЗапроса=ТекстЗапроса+Стр+">";
   Иначе
       Провайдер="Provider=ADSDSOObject;";
       ТекстЗапроса=ТекстЗапроса+Корень.Get("defaultNamingContext")+">";
   КонецЕсли;

   //Отберем только тип пользователи и только начинается логин вин200 на букову G
   Маска="*";
   Отбор=";(&(objectClass=Group)(sAMAccountName=" + Маска + "));AdsPath;subTree";
   ТекстЗапроса=ТекстЗапроса+Отбор;

   Соединение = СоздатьОбъект("ADODB.Connection");
   Соединение.Open(Провайдер);
   Записи=Соединение.Execute(ТекстЗапроса);
   Пока Записи.EOF=0 Цикл
       Состояние(Записи.Fields(0).Value);
       НоваяСтрока=ТЗ.НоваяСтрока();

       ЗаписиОбъекта=Это.GetObject(Записи.Fields(0).Value);
       // Можно и так
       //ЗаписиОбъекта=Это.ПолучитьОбъект(Записи.Fields(0).Value);
       ЗаписиОбъекта.GetInfo();
       Сч=0;
       Пока 1=1 Цикл
           Попытка
               Сч=Сч+1;
               Поле=ЗаписиОбъекта.Next();
           Исключение
               Прервать;
           КонецПопытки;
           Колонка=СтрЗаменить(Поле.Name,"-","_");
           Если ТЗ.ВидимостьКолонки(Колонка)=-1 Тогда
               ТЗ.НоваяКолонка(Колонка);
           КонецЕсли;
           Попытка
               ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,ЗаписиОбъекта.Get(Поле.Name));
           Исключение
               Попытка
                   ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,Это.МассивОбъекта(ЗаписиОбъекта,Поле).toArray(0).join("" ""));
                   Сообщить(Это.МассивОбъекта(ЗаписиОбъекта,Поле).toArray(0).join("" ""));
               Исключение
                   ТЗ.УстановитьЗначение(НоваяСтрока,Колонка,ОписаниеОшибки());
               КонецПопытки;
           КонецПопытки;
       КонецЦикла;
       Записи.MoveNext();
   КонецЦикла;
   ПерыеКолонки="name
   |displayName
   |sAMAccountName
   |userPrincipalName
   |telephoneNumber
   |mail";
   Стр="";
   Для Сч=1 По СтрКоличествоСтрок(ПерыеКолонки) Цикл
       Если ТЗ.ВидимостьКолонки(СтрПолучитьСтроку(ПерыеКолонки,Сч))>-1 Тогда
           Стр=Стр+СтрПолучитьСтроку(ПерыеКолонки,Сч)+",";
       КонецЕсли;
   КонецЦикла;
   ТЗ.Сортировать("name");
   ТЗ.ВидимостьКолонки(Стр,1,1);
   ТЗ.ВыбратьСтроку();
КонецПроцедуры
11 Aloex
 
15.07.11
12:09
(10) Благодарю, сейчас попробую.
AdBlock убивает бесплатный контент. 1Сергей