Конференция "Сети" » Как получить ВСЕ свойства пользователя из Active Directory? [D6, WinXP]
 
  • Валигози © (30.10.09 14:55) [0]
    Далее я опишу подробно все свои действия:
    Сначала импортирую ActiveDs_TLB.pas: Project -> Import Type Library... -> Active DS Type Library (Version 1.0) -> Create unit

    Потом в новом проекте:
    1) Объявляю функцию: function ADsGetObject(PathName: WideString; const riid: TGUID; out ppObject): HRESULT; stdcall; external 'activeds.dll';
    2) Прописываю в uses ActiveDs_TLB и бросаю TButton и TMemo.
    3) На событии кнопки OnClick пишу:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     PropList: IADsPropertyList;
     PropEntry: IADsPropertyEntry;
     i, Count: Integer;
     AdsUser: IAdsUser;
    begin
     ADsGetObject('WinNT://MyDomainName/MyUserName', IID_IADsUser, AdsUser); // здесь нужно прописать действительные имя домена и пользователя
     PropList:=AdsUser as IADsPropertyList;
     AdsUser.GetInfo;
     Count:=PropList.PropertyCount;

     Memo1.Lines.Clear;
     for i:=1 to Count do
     begin
       PropEntry:=IDispatch(PropList.Next) as IADsPropertyEntry;
       Memo1.Lines.Add(PropEntry.Name+#9+VarToStr(AdsUser.Get(PropEntry.Name)));
     end;
    end;

    Но при этом получаю почему то не все свойства. Отсутствуют например 'TelephoneNumber', 'OfficeLocations', 'EmailAddress' и др., хотя эти поля заполнены (в чём можно убедиться если зайти в консоль Active Directory Users and Computers)
    Если же попытаться получить значение этих свойств (например так: ShowMessage(AdsUser.Get('EmailAddress')) или так: ShowMessage(AdsUser.EmailAddress)), то получаю странное сообщение об ошибке: 'Свойства службы каталогов не могут быть найдены в кэше.'
  • Валигози © (02.11.09 11:53) [1]
    Странно, что нет ни одного ответа...
    Здаётся мне, что эта ошибка из-за того, что просто у 'WinNT' нет таких свойств и нужно использовать чтото другое, например
    ADsGetObject('LDAP://...

    , но у этого LDAP синтаксис жуткий - что я не подсовывал - не работает... :( Уже весь инет пролазил, перепробовал все возможные варианты параметров, никак не пойму в каком же виде ему нужно подсовывать имя домена (и другие параметры)... :(
  • Anatoly Podgoretsky © (02.11.09 12:23) [2]
    У 'WinNT' нет АД и LDAP
  • Валигози © (02.11.09 12:44) [3]

    > Anatoly Podgoretsky ©   (02.11.09 12:23) [2]
    > У 'WinNT' нет АД и LDAP

    Я имел ввиду провайдера. Тоесть, чтобы получить свойства которые не доступны через провайдера "WinNT" (который я вызываю так:
    ADsGetObject('WinNT://MyDomainName/MyUserName'

    ) нужно видимо обращаться к провайдеру "LDAP" так:
    ADsGetObject('LDAP://далее_жутко_непонятные_параметры/которые_у_меня_не_хотят_работать

    . Или иначе почему я не могу прочитать некоторые свойства, которые видно в консоли?
    Как же получить параметры через "LDAP"? У меня даже не хочет работать объект "NameTranslate" который умеет переводить имена домена из формата "WinNT://" в формат "LDAP://"... :(
    Блин засада... :(
  • clickmaker © (02.11.09 12:54) [4]
    LDAP://servername/CN=username,CN=users
    как-то так
  • Валигози © (02.11.09 13:03) [5]

    > clickmaker ©   (02.11.09 12:54) [4]
    > LDAP://servername/CN=username,CN=users
    > как-то так

    Вызываю:
    ADsGetObject('LDAP://S-HELIOS01/CN=ganitskiy-aa,CN=users', IID_IADsUser, AdsUser)

    получаю ошибку $8007203A...
  • clickmaker © (02.11.09 14:02) [6]
  • Валигози © (02.11.09 15:53) [7]

    > clickmaker ©   (02.11.09 14:02) [6]
    > http://www.google.ru/#hl=ru&newwindow=1&q=LDAP+0x8007203A&lr=&aq=f&oq=&fp=be4313e544833b95

    Это я уже смотрел (говорю, что уже весь интернет облазил) - только пользы никакой.
    Смысл в том, что в консоли видно много дополнительных свойств, но я не могу их программно получить ни через
    ADsGetObject('WinNT://

    ни через
    ADsGetObject('LDAP://

    .
    Вот снимок экрана: http://s42.radikal.ru/i095/0911/74/99d1422793f6.jpg
    Видно, что в консоли видно и номер телефона и e-mail и даже номер кабинета, я же не могу получить эти параметры хоть тресни... :(
  • Валигози © (04.11.09 16:45) [8]
    Вот нашёл на MSDN: http://msdn.microsoft.com/en-us/library/aa746507(VS.85).aspx
    Перечисляются свойства которые не поддерживает провайдер
    "WinNT://"

    в интерфейсе
    IADsUser

    , но при этом не пишут, как же эти свойства получить... :(
  • vKoka (16.12.09 16:59) [9]
    У провайдера WinNT другой набор свойств.
    iadsnametrnslate (гугли) поможет сконвертировать domain\userid имя к формату LDAP, а там уже вытаскивай свойства, которые тебе нужны.
 
Конференция "Сети" » Как получить ВСЕ свойства пользователя из Active Directory? [D6, WinXP]
Есть новые Нет новых   [134439   +32][b:0][p:0.001]