Active Directory + winmgmts + Getobject
Добавлено: 03 ноя 2006, 15:41
Добрый день!
пытаюсь занятся программированием для AD
почитал в MSDN решил для начала сделать 2 вещи
1. получить список компьютеров в домене.
2. определить операционнцую систему.
нашел примеры на VB (переделал их под kixscript по сути тот же VB)
там все предельно просто
и тут столкулся с проблемой в Delphi нет функции GetObject после блуждания по интернету нашел 2 ключевых слова
ADSI и ADO
про ADO все как-то туманно да можно рабоать но конкретно пример или описание нету.. все больше как подключиться к базам Paradox, Acess....
ADSI -- необходимо импортировать библиотеку с кучей классов, но как оказалась он не позволяет работать с winmgmts, что сразу не понравилось...
на мой взгляд можно было рабоать без привязки к классу а сразу через Variant! после некоторого блуждания в интернете наткнулся на такое описание GetObject
да отрабатывает без ошибки, но опять но
, теперь проблема как с VB перевести For Each ____ In ____ т. е те объекты, которые в единственном экземпляре нет проблем я получаю данные, но если их несколько, то проблема...
подскажите может кто-нибудь сталкивался с такими проблемами..
желательно пример...
заранее спасибо!
пытаюсь занятся программированием для AD
почитал в MSDN решил для начала сделать 2 вещи
1. получить список компьютеров в домене.
2. определить операционнцую систему.
нашел примеры на VB (переделал их под kixscript по сути тот же VB)
там все предельно просто
Код: Выделить всё
function domaincomp
Dim $list, $objDomain, $objComputername, $filter[0]
$domain=@DOMAIN
$filter[0]='Computer'
$objDomain = GetObject('WinNT://' + $domain + ',domain')
if @ERROR
exit @ERROR
endif
$objDomain.Filter=$filter
if @ERROR
exit @ERROR
endif
For Each $objComputername In $objDomain
redim preserve $list[ubound($list)+1]
$list[ubound($list)] = $objComputername.Name
? "Комп"+$objComputername.Name;
Next
endfunction
Код: Выделить всё
Function OSInfo(optional $Computer)
Dim $Syst,$
if not $Computer $Computer = "." endif
For Each $Syst In GetObject('winmgmts:{impersonationLevel=impersonate}!//' + $Computer + '\root\cimv2' ).ExecQuery('select * from Win32_OperatingSystem', , 48)
? 'Ось'+$Syst.Caption+'Версия'+$Syst.Version+'СервисПак'+$Syst.CSDVersion
Next
EndFunction
ADSI и ADO
про ADO все как-то туманно да можно рабоать но конкретно пример или описание нету.. все больше как подключиться к базам Paradox, Acess....
ADSI -- необходимо импортировать библиотеку с кучей классов, но как оказалась он не позволяет работать с winmgmts, что сразу не понравилось...
на мой взгляд можно было рабоать без привязки к классу а сразу через Variant! после некоторого блуждания в интернете наткнулся на такое описание GetObject
Код: Выделить всё
function getobject(const name:string;accs:dword=STGM_default):variant;
var err:HResult;
bo:tBINDOPTS;
res:IDispatch;
nm:widestring;
begin nm := name; fillchar(bo,sizeof(bo),0);
with bo do begin cbStruct := sizeof(bo);
grfFlags := BIND_MAYBOTHERUSER;
grfMode := accs;
end;
err:=CoGetObject( @nm[1] , @bo , IDispatch , @res );
OleCheck(err);
result:=res;
end;

подскажите может кто-нибудь сталкивался с такими проблемами..
желательно пример...
заранее спасибо!