-
Далее я опишу подробно все свои действия: Сначала импортирую 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)), то получаю странное сообщение об ошибке: 'Свойства службы каталогов не могут быть найдены в кэше.'
-
Странно, что нет ни одного ответа... Здаётся мне, что эта ошибка из-за того, что просто у 'WinNT' нет таких свойств и нужно использовать чтото другое, например ADsGetObject('LDAP: , но у этого LDAP синтаксис жуткий - что я не подсовывал - не работает... :( Уже весь инет пролазил, перепробовал все возможные варианты параметров, никак не пойму в каком же виде ему нужно подсовывать имя домена (и другие параметры)... :(
-
У 'WinNT' нет АД и LDAP
-
> Anatoly Podgoretsky © (02.11.09 12:23) [2] > У 'WinNT' нет АД и LDAP
Я имел ввиду провайдера. Тоесть, чтобы получить свойства которые не доступны через провайдера "WinNT" (который я вызываю так: ADsGetObject('WinNT://MyDomainName/MyUserName' ) нужно видимо обращаться к провайдеру "LDAP" так: ADsGetObject('LDAP: . Или иначе почему я не могу прочитать некоторые свойства, которые видно в консоли? Как же получить параметры через "LDAP"? У меня даже не хочет работать объект "NameTranslate" который умеет переводить имена домена из формата "WinNT://" в формат "LDAP://"... :( Блин засада... :(
-
LDAP://servername/CN=username,CN=users как-то так
-
> 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...
-
-
-
-
У провайдера WinNT другой набор свойств. iadsnametrnslate (гугли) поможет сконвертировать domain\userid имя к формату LDAP, а там уже вытаскивай свойства, которые тебе нужны.
|