Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Liste der Domain-User (https://www.delphipraxis.net/51259-liste-der-domain-user.html)

UweR 9. Aug 2005 11:01


Liste der Domain-User
 
Hallo Leute,

wie kriege ich eine Liste aller Nutzer die sich in meiner Domäne befinden.

Madlax 9. Aug 2005 11:32

Re: Liste der Domain-User
 
Hallo UweR,

die Möglichkeit, die mir auf die schnelle einfällt, wäre das komplette Active Directory nach allen Usern zu durchsuchen. Ich nehme an, dass du mit Nutzern die User meinst?
Das setzt jedoch voraus, dass du dich in Delphi mit Interfaces auskennst, welche dir Microsoft in der activeds.dll (%systemroot%\system32) zur Verfügung stellt.

Im MSDN steht dir eine Vielzahl von Quellen zur Verfügung, die die Verwendung der Interfaces erklären.

Habe dort auf Anhieb sogar ein Beispiel gefunden, dass auf deinen Fall zutreffen sollte:
http://msdn.microsoft.com/library/en..._for_users.asp

EDIT: Activeds.dll wirst du wohl nur auf Windows XP/MS Windows 2003 Server vorfinden. Bei anderen Systemen musst du, soweit mir bekannt, die Verwaltungstools für MS Windows Server 2003 installieren, diese sollten die Dll mit installieren.

UweR 9. Aug 2005 12:07

Re: Liste der Domain-User
 
Hallo Madlax,

erst mal danke für die Antwort. Ich werd mich da schon irgendwie durchwühlen!

Olli 9. Aug 2005 12:09

Re: Liste der Domain-User
 
Von welchem OS reden wir denn? Die LMAPI bietet dir Zugriff von NT bis 2003 und das AD (i.e., die ADS) erst ab 2000 - allerdings ließ sich der ADS-Client auch schon auf NT4 ab SP5(?) installieren.

Im letzteren Fall kannst du bequem über Scripting usw (siehe Madlax' Beispiel) arbeiten. Im ersten Fall mit folgenden APIs:
MSDN-Library durchsuchenNetUserAdd
MSDN-Library durchsuchenNetUserChangePassword
MSDN-Library durchsuchenNetUserDel
MSDN-Library durchsuchenNetUserEnum
MSDN-Library durchsuchenNetUserGetGroups
MSDN-Library durchsuchenNetUserGetInfo
MSDN-Library durchsuchenNetUserGetLocalGroups
MSDN-Library durchsuchenNetUserSetGroups
MSDN-Library durchsuchenNetUserSetInfo

UweR 9. Aug 2005 12:55

Re: Liste der Domain-User
 
Hallo Olli,

mit NetUserEnum kriege ich aber nur die lokalen Nutzer und nicht die aus der Domäne. Als OS gilts ab W2K-server aufwärts.

Olli 9. Aug 2005 12:58

Re: Liste der Domain-User
 
Zitat:

Zitat von UweR
mit NetUserEnum kriege ich aber nur die lokalen Nutzer und nicht die aus der Domäne.

Dann hast du vermutlich auch nicht den Servernamen angegeben (erster Parameter).

Zitat:

Zitat von UweR
Als OS gilts ab W2K-server aufwärts.

Dann ist ADS (siehe oben) sowieso die bessere Alternative. In Perl habe ich sogar Code (PHP auch), aber mit Delphi kann ich leider nicht dienen ;)

Madlax 9. Aug 2005 13:34

Re: Liste der Domain-User
 
Hallo UweR,

ich habe eben mal meine Sources durchgeschaut und habe was gefunden, dass dir wahrscheinlich helfen wird. Dabei handelt es sich um eine Funktion die dir alle User in einer Domäne per ADOQuery zusammensammelt.

Delphi-Quellcode:
Uses ActiveDS_TLB;

//Binds to an ADSI object using the current credentials.
Function ADsGetObject(       lpszPathName: WideString;
                       Const riid       : TGUID;
                         Out ppObject                ): HRESULT; Safecall;

Function ADsGetObject; External 'activeds.dll';

Function GetObject( Path: String ): IDispatch;
Begin
  ADsGetObject( Path, IDispatch, Result );
End; {Of GetObject}

Procedure TfrmADSIx.Users;
Var iAdRootDSE : IADs;
    Conn       : TADOConnection;
    Data       : TADODataSet;
    Cmd        : TADOCommand;
    varDefaultNC: Variant;
    strQuery   : String;
Begin
  //Find users by searching Active Directory.
  //This can be run from any DSClient-enabled computer.
  Conn := TADOConnection.Create( NIL );
  Data := TADODataSet.Create( NIL );
  Cmd := TADOCommand.Create( NIL );

  //Get the default naming context.
  iAdRootDSE  := GetObject( 'LDAP://RootDSE' ) As IADs;
  varDefaultNC := iAdRootDSE.Get( 'defaultNamingContext' );

  //Open the connection.
  Conn.Provider   := 'ADsDSOObject';
  Conn.LoginPrompt := False;
  Conn.Open;
   
  //Build the query to find all of the users.
  strQuery := '<LDAP://' + varDefaultNC + '>;(objectClass=user);name;subtree';

  Cmd.Connection := Conn;
  Cmd.ParamCheck := False;
  Cmd.CommandText := strQuery;
  Data.Recordset := Cmd.Execute;

  //Iterate through the results.
  While Not Data.Eof Do Begin
      ShowMessage( 'Name: ' + Data.FieldByName( 'name' ).AsString );
      Data.Next;
  End;

  //Clean up.
  Data.Free;
  Cmd.Free;
  Conn.Free;
  iAdRootDSE := NIL;
End; {Of Users}
In diesem Beispiel wurde activeds.dll als Typbibliothek nach Delphi importiert.
Die Funktion "ADsGetObject" befindet sich ebenfalls in dieser Dll, nähere Infos dazu findest du im MSDN.

renekr 24. Apr 2006 12:41

Re: Liste der Domain-User
 
Hi Madlax ,
Ich habe mal versucht das AD mit der Typbibl. einzubinden und habe mit den Objects Probleme .
Kannst du mir da ev. weiterhelfen?

speziell damit:
Delphi-Quellcode:
 iAdRootDSE  := GetObject( 'LDAP://RootDSE' ) As IADs;
  varDefaultNC := iAdRootDSE.Get( 'defaultNamingContext' );

Ich habe bei GetObject unseren AD Pfad angegeben aber weiß nicht was bei iAdRootDSE.Get reinsoll?

Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 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