Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Помогите разобраться....  [new]
SergeyS
Member

Откуда:
Сообщений: 715
Пытаюсь получить информацию о пользователе из Active Directory (см. ниже). Когда указываю имя домена и логин пользователя (Button2Click) жёстко, то всё получается, а когда ввожу с помощью переменных (Button1Click), то вылетает ошибка, в чём тут может быть дело, подскажите....

uses
... comobj, ActiveX, ActiveDs_TLB;

function ADsGetObject(lpszPathName:PWideChar; const riid:tiid; out Obj):HRESULT;stdcall;external 'Activeds.dll';

procedure TForm1.Button2Click(Sender: TObject);
var
user: IADsUser;
begin
ADsGetObject('WinNT://domen_name/login_name', IADsUser, user);
ShowMessage(User.FullName);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
WshNet : variant;
user: IADsUser;
s, f: string;
begin
WshNet := CreateOleObject('WScript.Network');
if not VarIsNull(WshNet) then begin
s:='admin';
f:=WshNet.UserDomain;
ADsGetObject(PWideChar('WinNT://'+f+'/'+s), IADsUser, user);
ShowMessage(User.FullName);
end;
end;
27 сен 07, 08:20    [4721447]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться....  [new]
Noskov
Member

Откуда: Москва
Сообщений: 394
Твои проблемы - из-за неразберихи с типами. Надо делать как-то так:

var Path: WideString;
...

Path:='WinNT://'+f+'/'+s;
ADsGetObject(PWideChar(Path), IADsUser, user);
27 сен 07, 10:42    [4722182]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Помогите разобраться....  [new]
oleg-jaguar
Member

Откуда:
Сообщений: 3
Имя пользователя получаем, а как получить telephonenumbler ?
Пишет "Свойства службы каталогов не могут быть найдены в кэше"
9 мар 19, 20:15    [21828480]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться....  [new]
Gator
Member

Откуда: Москва
Сообщений: 14088
oleg-jaguar
Имя пользователя получаем, а как получить telephonenumbler ?
Пишет "Свойства службы каталогов не могут быть найдены в кэше"
Откуда получить? Из AD? Ну, спроси админа AD, откуда он его берет и куда пишет
9 мар 19, 21:43    [21828538]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться....  [new]
oleg-jaguar
Member

Откуда:
Сообщений: 3
Gator, в профиле пользователя AD уже есть эта информация, надо чтобы ее оттуда брала дельфа
10 мар 19, 19:13    [21828770]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться....  [new]
Gator
Member

Откуда: Москва
Сообщений: 14088
oleg-jaguar, ты ж до профмля достучался?
https://docs.microsoft.com/ru-ru/system-center/scsm/ad-ds-attribs?view=sc-sm-1807
11 мар 19, 00:09    [21828827]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться....  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10782
oleg-jaguar
Пишет "Свойства службы каталогов не могут быть найдены в кэше"
Это нормальная ошибка, если свойство не заполнено. Или импортируйте stdcall методы вместо safecall и анализируйте возвращаемый HRESULT
function TUserInfo.GetPhone: string;
var
  LRes: HResult;
  LPhone: OleVariant;
begin
  LRes := ADsUser.Get_TelephoneNumber(LPhone);
  case LRes of
    S_OK: Result := LPhone;
    E_ADS_PROPERTY_NOT_FOUND: Result := EmptyStr;
  else
     OleError(LRes);
  end;
end;
или пишите так
function TUserInfo.GetPhone: string;
begin
  try
    Result := ADsUser.TelephoneNumber;
  except
    on E: EOleException do begin
      if E.ErrorCode = E_ADS_PROPERTY_NOT_FOUND then
        Result := EmptyStr
      else
        raise;
    end;
  end;
end;
11 мар 19, 17:57    [21829559]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить