Как вытащить имя и e-mail юзера из домена

Dima_Tr
Дата: 11.06.2009 12:18:36
Доброго времени суток. Подскажите пожалуйста как вытащить имя и e-mail юзверей из домена ?
Klick
Дата: 11.06.2009 12:33:52
Вот такой функцией пользуемся:

//проверка присутствие пользователя в группе в Acrive Directory
function FCheckUpUserInGroup(UserName: string; GroupName: string; DomainName: string): boolean;
var

  i: integer;
  ArrayMemberOf: variant;
  MemberOfString: string;
  NewADOConnection: TADOConnection;
  NewADOQuery: TADOQuery;
begin
  Result := false;
  UserName:=AnsiUpperCase(Trim(UserName));
  GroupName:=AnsiUpperCase(Trim(GroupName));

  NewADOConnection:=TADOConnection.Create(nil);

  with NewADOConnection do
  begin
    LoginPrompt:=false;
    ConnectionString:='Provider=ADsDSOObject;Encrypt Password=False;Mode=Read;Bind Flags=0';
  end;
  NewADOQuery:=TADOQuery.Create(nil);
  with NewADOQuery do
  begin
    SQL.Text:='select memberof from ''LDAP://'+DomainName+''' where userPrincipalName='''+UserName+'@'+DomainName+'''';
    Connection:=NewADOConnection;
  end;
  NewADOQuery.Open;

  if not NewADOQuery.IsEmpty then
  begin
    ArrayMemberOf:=NewADOQuery.FieldByName('memberof').AsVariant;
    i:=VarArrayLowBound(ArrayMemberOf,1);
    while i<=VarArrayHighBound(ArrayMemberOf,1) do
    begin
      MemberOfString:=VarToStr(NewADOQuery.FieldByName('memberof').Value[i]);
      i:=i+1;
      if Pos(GroupName,AnsiUpperCase(MemberOfString))>0 then Result:=true;
    end;
  end;

  NewADOQuery.Close;
  NewADOQuery.Destroy;
  NewADOConnection.Destroy;
end;

В этом направлении и копать...
Dima_Tr
Дата: 11.06.2009 12:44:42
А можете прокомментировать эту строчку
 SQL.Text:='select memberof from ''LDAP://'+DomainName+''' where userPrincipalName='''+UserName+'@'+DomainName+'''';
буду очень благодарен
Klick
Дата: 11.06.2009 12:50:45
все неудаленные юзеры домена:
select 
userPrincipalName,
cn,
objectSid
from 'LDAP://имя домена'
where objectCategory = 'person'
and physicalDeliveryOfficeName > 0
and (userAccountControl=512 or userAccountControl=66048)
order by name

все доменные группы:
select 
userPrincipalName,
cn,
objectSid
 from 'LDAP://имя домена'
WHERE objectClass='group'
order by cn

Заросы в ADO квери можно выполнить... или в ADODataSet через ADOCommand
Klick
Дата: 11.06.2009 12:52:39
комментировать строчку особо нужны нет... пример не совсем удачный... там выдергивается из домена только одно поле memberof , в котором содержится массив групп в которых состоит пользователь
Klick
Дата: 11.06.2009 12:55:19
Поля в LDAP:
"sn" -> Фамилия
"givenname" -> Имя
"cn" -> Полное имя
"company" -> Организация
"mail" -> Адрес электронной почты
"title" -> Должность
"telephonenumber" -> Рабочий телефон
"homephone" -> Домашний телефон
"pager" -> Мобильный телефон
"postofficebox" -> Номер факса
"streetaddress" -> Адрес
"l" -> Город
"st" -> Республика, область или край
"countrycode" -> Индекс
"co" -> Страна или регион
"wwwhomepage" -> Веб-страница
"description" -> Примечания
Dima_Tr
Дата: 11.06.2009 13:01:30
Огромное спасибо!!!
Dima_Tr
Дата: 11.06.2009 13:22:55
А еще вопрос в качестве имени домена передается например "main-server" или что-то другое, потому что если пробую так
 SQL.TEXT:='select userPrincipalName, cn, objectSid from ''LDAP://main-server'' WHERE objectClass=''group'' order by cn';
то выдает ошибку, что "Таблица не существует"
Klick
Дата: 11.06.2009 13:26:16
у нас передается полное имя домена... вплоть до .ru
Weaver
Дата: 10.07.2009 04:34:15
Добрый день.

ADOConnection - соединение нормальное
ADOQuery - при открытии говорит "Отсутствует право доступа".

select distinguishedName,Name from 'LDAP://DC=domainname,DC=local' where objectClass='user' or objectClass='group' 

Права - полные.

Куда копать?