![]() |
Probleme mit ADSI
Hi
Ich versuche jetzt seit 2 Tagen eine einfache ADSI Verbindung herzustellen, aber es klappt einfach nicht :evil: Mittels Google findet man genau eine...eine einzige Anleitung zu Adsi mit Delphi und die ist kompliziert, unvollständig und englisch geschrieben. Selbstverständlich wurden bei dem Code den man da downloaden kann noch 200 externe Komponenten hinzugefügt, damit man es jaaa nicht ausführen kann. Ich brauche keinen Schreibzugriff oder so, sondern nur die Möglichkeit: -Alle User aufzulisten -Alle Gruppen aufzulisten ---Die User einer Gruppe aufzulisten -Nach einem einzelnen User zu suchen ---Seine Gruppen anzuzeigen
Delphi-Quellcode:
Ich dachte mir, so irgendwie könnte ich mal einen User finden, aber falsch gedacht...gefunden habe ich nur Zugriffsverletzungen :(
procedure TForm2.initAdsi(Sender: TObject);
var aDomain : IAdsContainer; aUsers : IEnumVariant; aUser : IADsUser; aGroup : IADsGroup; V : OleVariant; w : DWord; VA : Variant; bind : String; user : String; begin bind:='LDAP://OU=***,OU=***,DC=***,DC=***,DC=***'; // Interface für die Domäne anfordern aDomain := GetObject(bind) as IAdsContainer; VA := VarArrayCreate([ 0, 0 ], varVariant); VA[0] := 'user'; aDomain.Filter := VA; aUsers := (aDomain._NewEnum) as IEnumVariant; while aUsers.Next(1, V, w) = S_OK do begin user := aUser.Name; if user = 'muster thomas' then begin ShowMessage(aUser.Department); end; end; end; Hat jemand von euch schonmal mit ADSI gearbeitet und hat ein einfaches (!!!!) Beispiel? |
Re: Probleme mit ADSI
Hi,
warum Google, wenn alles in der DP zu finden ist? Zum einstiegt reichen diese (exemplarischen) Beiträge: ![]() und ![]() Für weiterführende Geschichten schön die DP-Suche nutzen. Gruß |
Re: Probleme mit ADSI
Posted a sample using Jwa yesterday:
![]() This is a snippet from one of my old programs that enumerates all objects in the Active Directory into a treeview
Delphi-Quellcode:
uses
ActiveDS_TLB, AdsHlp, ActiveX, ComObj; // AdsHlp is a helper unit from agnisoft ... procedure TADTreeThread.Execute; var hr: hResult; objrootDSE: IADS; objContainer: IADS; sPath: string; begin CoInitialize(nil); try hr := ADsGetObject(WideString('LDAP://rootDSE'), IID_IADS, objrootDSE); except on E: Exception do begin Exit; end; end; if Failed(hr) then exit; sPath := Format('LDAP://%s', [VarToStr(objrootDSE.Get('defaultNamingContext'))]); hr := ADsGetObject(sPath, IADS, objContainer); if Failed(hr) then exit; fRootNode := fADTree.Items.Add(nil, StringReplace(objContainer.Name, 'DC=', '', [rfReplaceAll])); with fRootNode do begin Data := TNodeData.Create; TNodeData(Data).Filled := True; TNodeData(Data).sAdsPath := sPath; TNodeData(Data).sClass := objContainer.Class_; ImageIndex := frMain.Icons.AD; end; EnumAndAdd(fRootNode, (objContainer as IADSContainer), VarArrayOf(['organizationalUnit', 'container'])); objContainer := nil; objrootDSE := nil; CoUnInitialize; end; procedure TADTreeThread.EnumAndAdd(ParentNode: TTreeNode; objContainer: IADSContainer; Filter: OleVariant); var Enum: IEnumVariant; Fetched: Cardinal; ResultItem: OleVariant; objAD: IADS; NewNode: TTreeNode; begin // fADTree.Items.BeginUpdate; if Assigned(objContainer) then begin objContainer.Filter := Filter; Enum := objContainer._Newenum as IEnumVariant; Enum.Reset; Enum.Next(1, ResultItem, Fetched); while Fetched = 1 do begin objAD := IDispatch(ResultItem) as IADS; if objAD.Class_ = 'user' then begin with fADTree.Items.AddChild(ParentNode, StringReplace(StringReplace(objAD.Name, 'CN=', '', [rfIgnoreCase]), '\,', '', [rfIgnoreCase])) do begin ImageIndex := IconRecord.User; SelectedIndex := IconRecord.User; Data := TNodeData.Create; TNodeData(Data).sAdsPath := objAD.ADsPath; TNodeData(Data).sClass := objAD.Class_; TNodeData(Data).Filled := True; end; end else if objAD.Class_ = 'group' then begin with fADTree.Items.AddChild(ParentNode, StringReplace(objAD.Name, 'CN=', '', [rfIgnoreCase])) do begin ImageIndex := IconRecord.Users; SelectedIndex := IconRecord.Users; Data := TNodeData.Create; TNodeData(Data).sAdsPath := objAD.ADsPath; TNodeData(Data).sClass := objAD.Class_; TNodeData(Data).Filled := True; end; end else if objAD.Class_ = 'organizationalUnit' then begin NewNode := FADTree.Items.AddChild(ParentNode, StringReplace(objAD.Name, 'OU=', '', [rfIgnoreCase])); with NewNode do begin ImageIndex := IconRecord.ADOU; SelectedIndex := IconRecord.ADOU; Data := TNodeData.Create; TNodeData(Data).sAdsPath := objAD.ADsPath; TNodeData(Data).sClass := objAD.Class_; FADTree.Items.AddChild(NewNode, 'dummy'); if NewNode <> nil then begin // EnumAndAdd(NewNode, (objAD as IADSContainer), Filter); end; end; end else if objAD.Class_ = 'container' then begin NewNode := fADTree.Items.AddChild(ParentNode, StringReplace(objAD.Name, 'CN=', '', [rfIgnoreCase])); with NewNode do begin ImageIndex := IconRecord.ADCont; SelectedIndex := IconRecord.ADCont; Data := TNodeData.Create; TNodeData(Data).sAdsPath := objAD.ADsPath; TNodeData(Data).sClass := objAD.Class_; // EnumAndAdd(NewNode, (objAD as IADSContainer), Filter); fADTree.Items.AddChild(NewNode, 'dummy'); end; end; Enum.Next(1, ResultItem, Fetched); end; NewNode := nil; NewNode.Free; objAD := nil; end; // fADTree.Items.EndUpdate; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz