Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться.... / 7 сообщений из 7, страница 1 из 1
27.09.2007, 08:20
    #34829902
SergeyS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться....
Пытаюсь получить информацию о пользователе из 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;
...
Рейтинг: 0 / 0
27.09.2007, 10:42
    #34830246
Noskov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться....
Твои проблемы - из-за неразберихи с типами. Надо делать как-то так:

Код: plaintext
1.
2.
3.
4.
 var  Path: WideString;
...

Path:='WinNT://'+f+'/'+s;
ADsGetObject(PWideChar(Path), IADsUser, user);
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.03.2019, 20:15
    #39784125
oleg-jaguar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться....
Имя пользователя получаем, а как получить telephonenumbler ?
Пишет "Свойства службы каталогов не могут быть найдены в кэше"
...
Рейтинг: 0 / 0
09.03.2019, 21:43
    #39784169
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться....
oleg-jaguarИмя пользователя получаем, а как получить telephonenumbler ?
Пишет "Свойства службы каталогов не могут быть найдены в кэше"Откуда получить? Из AD? Ну, спроси админа AD, откуда он его берет и куда пишет
...
Рейтинг: 0 / 0
10.03.2019, 19:13
    #39784302
oleg-jaguar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться....
Gator, в профиле пользователя AD уже есть эта информация, надо чтобы ее оттуда брала дельфа
...
Рейтинг: 0 / 0
11.03.2019, 00:09
    #39784322
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться....
oleg-jaguar, ты ж до профмля достучался?
https://docs.microsoft.com/ru-ru/system-center/scsm/ad-ds-attribs?view=sc-sm-1807
...
Рейтинг: 0 / 0
11.03.2019, 17:57
    #39784620
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться....
oleg-jaguarПишет "Свойства службы каталогов не могут быть найдены в кэше"Это нормальная ошибка, если свойство не заполнено. Или импортируйте stdcall методы вместо safecall и анализируйте возвращаемый HRESULT
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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;

или пишите так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться.... / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]