Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Как получить ВСЕ свойства пользователя из Active Directory?   Найти похожие ветки 

 
Валигози ©   (2009-10-30 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)), то получаю странное сообщение об ошибке: "Свойства службы каталогов не могут быть найдены в кэше."


 
Валигози ©   (2009-11-02 11:53) [1]

Странно, что нет ни одного ответа...
Здаётся мне, что эта ошибка из-за того, что просто у "WinNT" нет таких свойств и нужно использовать чтото другое, например ADsGetObject("LDAP://..., но у этого LDAP синтаксис жуткий - что я не подсовывал - не работает... :( Уже весь инет пролазил, перепробовал все возможные варианты параметров, никак не пойму в каком же виде ему нужно подсовывать имя домена (и другие параметры)... :(


 
Anatoly Podgoretsky ©   (2009-11-02 12:23) [2]

У "WinNT" нет АД и LDAP


 
Валигози ©   (2009-11-02 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 ©   (2009-11-02 12:54) [4]

LDAP://servername/CN=username,CN=users
как-то так


 
Валигози ©   (2009-11-02 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 ©   (2009-11-02 14:02) [6]

http://www.google.ru/#hl=ru&newwindow=1&q=LDAP+0x8007203A&lr=&aq=f&oq=&fp=be4313e544833b95


 
Валигози ©   (2009-11-02 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 и даже номер кабинета, я же не могу получить эти параметры хоть тресни... :(


 
Валигози ©   (2009-11-04 16:45) [8]

Вот нашёл на MSDN: http://msdn.microsoft.com/en-us/library/aa746507(VS.85).aspx
Перечисляются свойства которые не поддерживает провайдер "WinNT://" в интерфейсе IADsUser, но при этом не пишут, как же эти свойства получить... :(


 
vKoka   (2009-12-16 16:59) [9]

У провайдера WinNT другой набор свойств.
iadsnametrnslate (гугли) поможет сконвертировать domain\userid имя к формату LDAP, а там уже вытаскивай свойства, которые тебе нужны.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
2-1339945459
ankazh
2012-06-17 19:04
2013.03.22
VISIBLE


15-1339959786
Artem
2012-06-17 23:03
2013.03.22
Pocket Fritz


15-1338660812
Knight
2012-06-02 22:13
2013.03.22
Как распечатывать текст программы для диплома?


15-1328642557
Юрий Зотов
2012-02-07 23:22
2013.03.22
И снова нужен человек


15-1328563233
Германн
2012-02-07 01:20
2013.03.22
Небольшой опрос по провайдерам и SMTP-серверам