![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить ВСЕ свойства пользователя из Active Directory? [D6, WinXP]
Валигози © (2009-10-30 14:55:00)Далее я опишу подробно все свои действия:
Сначала импортирую 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)), то получаю странное сообщение об ошибке: 'Свойства службы каталогов не могут быть найдены в кэше.'
vKoka (2009-12-16 16:59:00) [1]У провайдера WinNT другой набор свойств.
iadsnametrnslate (гугли) поможет сконвертировать domain\userid имя к формату LDAP, а там уже вытаскивай свойства, которые тебе нужны.
Валигози (2009-11-04 16:45:00) [2]Вот нашёл на MSDN: http://msdn.microsoft.com/en-us/library/aa746507(VS.85).aspx
Перечисляются свойства которые не поддерживает провайдер"WinNT://"в интерфейсеIADsUser, но при этом не пишут, как же эти свойства получить... :(
Валигози (2009-11-02 15:53:00) [3]
> 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 и даже номер кабинета, я же не могу получить эти параметры хоть тресни... :(
clickmaker (2009-11-02 14:02:00) [4]http://www.google.ru/#hl=ru&newwindow=1&q=LDAP+0x8007203A&lr=&aq=f&oq=&fp=be4313e544833b95
Валигози (2009-11-02 13:03:00) [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 (2009-11-02 12:54:00) [6]LDAP://servername/CN=username,CN=users
как-то так
Валигози (2009-11-02 12:44:00) [7]
> Anatoly Podgoretsky © (02.11.09 12:23) [2]
> У 'WinNT' нет АД и LDAP
Я имел ввиду провайдера. Тоесть, чтобы получить свойства которые не доступны через провайдера "WinNT" (который я вызываю так:ADsGetObject('WinNT://MyDomainName/MyUserName') нужно видимо обращаться к провайдеру "LDAP" так:ADsGetObject('LDAP://далее_жутко_непонятные_параметры/которые_у_меня_не_хотят_работать. Или иначе почему я не могу прочитать некоторые свойства, которые видно в консоли?
Как же получить параметры через "LDAP"? У меня даже не хочет работать объект "NameTranslate" который умеет переводить имена домена из формата "WinNT://" в формат "LDAP://"... :(
Блин засада... :(
Anatoly Podgoretsky (2009-11-02 12:23:00) [8]У 'WinNT' нет АД и LDAP
Валигози (2009-11-02 11:53:00) [9]Странно, что нет ни одного ответа...
Здаётся мне, что эта ошибка из-за того, что просто у 'WinNT' нет таких свойств и нужно использовать чтото другое, напримерADsGetObject('LDAP://..., но у этого LDAP синтаксис жуткий - что я не подсовывал - не работает... :( Уже весь инет пролазил, перепробовал все возможные варианты параметров, никак не пойму в каком же виде ему нужно подсовывать имя домена (и другие параметры)... :(