Имя: Пароль:
1C
 
Получить инфу о пользователе из AD
0 ДенисЧ
 
12.01.09
11:52
Как можно из AD получить информацию о пользователе по его логин-имени?
Всё это из 7.7, разумеется...
1 smaharbA
 
12.01.09
11:55
net user Вася /domain
не пойдет ?
2 ДенисЧ
 
12.01.09
11:57
Хотелось бы в несколько более объектном виде :-)
3 vde69
 
12.01.09
11:58
ПолучитьCOMОбъект("WinNT://" + СокрЛП(ИмяДомена))
4 ДенисЧ
 
12.01.09
11:59
(3) Не ожидал от тебя...
5 vde69
 
12.01.09
12:00
(4) почему? весь код не даю, ибо под 8 заточен
6 ДенисЧ
 
12.01.09
12:00
(5) Написал же "Всё это из 7.7, разумеется.".
А в 7.7 нет ПолучитьСОМОбъект()
7 vde69
 
12.01.09
12:01
можно например так
Процедура ЗаполнитьПочтовыеАдресаИзAD()
   Попытка                
       conn = ПолучитьCOMОбъект("","ADODB.Connection");
       conn.Provider = "ADSDSOObject";
       conn.Open("Active Directory Provider");
   Исключение
       Предупреждение("Ошибка подключения к Active Directory!");
       Возврат;
   КонецПопытки;    
   
   Для Каждого Стр из Таблица Цикл
       Если НЕ ПустаяСтрока(Стр.Логин) Тогда
           Попытка                
               query = "SELECT ADsPath FROM 'LDAP://DC="+СокрЛП(Домен.Код)+"' WHERE SAMAccountName='"+Стр.Логин+"'";
               rs = conn.Execute(query);
               Пока НЕ rs.EOF() Цикл
                   obj = ПолучитьCOMОбъект(rs.Fields(0).Value);
                   Если obj.Class="user" Тогда
                       Стр.НоваяПочта=СокрЛП(obj.EmailAddress);
                       Если Стр.НоваяПочта<>Стр.СтараяПочта Тогда
                           Стр.Установить=Истина;
                       КонецЕсли;
                   КонецЕсли;
                   rs.MoveNext();
               КонецЦикла;
           Исключение
               Сообщить("Ошибка получения почты для логина :"+Стр.Логин);                                                                      
           КонецПопытки;
       КонецЕсли;
   КонецЦикла;
   conn.Close();    
КонецПроцедуры
8 vde69
 
12.01.09
12:01
(6) переделаешь, там не много
9 vde69
 
12.01.09
12:02
(7) надеюсь ADO по 77 переведешь :)
10 smaharbA
 
12.01.09
12:05
адо довольно тормознутое
11 skunk
 
12.01.09
12:06
а чем всх не устраивает?
12 vde69
 
12.01.09
12:07
(10) согасен, зато доступ ко всем полям есть, а WinNT - быстрее, но часть полей недоступно (например почта)
13 ДенисЧ
 
12.01.09
12:07
(9) Посмотрю, спасибо.
(11) пример?
14 skunk
 
12.01.09
12:18

//******************************************************************************
// ПолучитьПользователей()
//******************************************************************************
Процедура ПолучитьПользователей()
   СписокЮзеров.УдалитьСтроки();
   ТекстУсловия="Domain = '"+ТекДомен+"'";
   Попытка
       ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
       ScrptCtrl.Language="vbscript";
       ScrptCtrl.AddCode("
       |Function GetUsers()
       |    strInfo=vbNullString
       |    Set objWMIService = GetObject(""winmgmts:{ImpersonationLevel=Impersonate}!\\.\root\cimv2"")
       |    Set colItems = objWMIService.ExecQuery(""Select * from Win32_UserAccount"")
       |    For Each objItem in colItems
       |        strInfo = strInfo & objItem.Name & vbTab & objItem.FullName & vbTab & objItem.Caption & vbTab & objItem.Status & vbTab
       |        If objItem.Disabled = vbTrue Then
       |            strInfo = strInfo & ""True"" & vbTab
       |        ElseIf objItem.Disabled = vbFalse Then
       |            strInfo = strInfo & ""False"" & vbTab
       |        End If
       |        If objItem.LocalAccount = vbTrue Then
       |            strInfo = strInfo & ""True"" & vbTab
       |        ElseIf objItem.LocalAccount = vbFalse Then
       |            strInfo = strInfo & ""False"" & vbTab
       |        End If
       |        strInfo = strInfo & vbCrLf
       |    Next
       |    GetUsers = strInfo
       |End Function
       |");
       Текст=ScrptCtrl.Run("GetUsers");
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;
   КолвоПолз = СтрКоличествоСтрок(Текст);
   Для ы=1 по КолвоПолз Цикл
       СтрКомп    = СтрПолучитьСтроку(Текст,ы);
       СписокЮзеров.НоваяСтрока();
       СписокЮзеров.Name            = ПолучитьПараметр(СтрКомп);
       СписокЮзеров.FullName        = ПолучитьПараметр(СтрКомп);
       СписокЮзеров.Caption        = ПолучитьПараметр(СтрКомп);
       СписокЮзеров.Status            = ПолучитьПараметр(СтрКомп);
       СписокЮзеров.Disabled        = ПолучитьПараметр(СтрКомп);
       СписокЮзеров.LocalAccount    = ПолучитьПараметр(СтрКомп);
   КонецЦикла;
   СписокЮзеров.Сортировать("Name+",);
   ScrptCtrl = 0;
КонецПроцедуры // ПолучитьПользователей()  


(c)тырено
15 skunk
 
12.01.09
12:20
могу всю обработку кинуть откуда стырено
16 ДенисЧ
 
12.01.09
12:21
(15) Этого достаточно. Буду разбираться...
17 vde69
 
12.01.09
12:25
(14) winmgmts:{ImpersonationLevel=Impersonate}!
это примерно то-же, что и WinNT вроде там то-же не все поля доступны
18 skunk
 
12.01.09
12:33
(17)должны быть все ... wmi в принципе для этого и создовалась... для автоматизации управления и прочая хня
19 smaharbA
 
12.01.09
13:35
в вми есть плюс очень неплохой для 1с и прочих текстов
можно получить все записи и поля как текст со знаком =