Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Active Directory: Benutzer/Computer mit Anlagedatum? (https://www.delphipraxis.net/101548-active-directory-benutzer-computer-mit-anlagedatum.html)

Sharky 15. Okt 2007 12:17


Active Directory: Benutzer/Computer mit Anlagedatum?
 
Hai ihr,

kann mir einer sagen wie ich aus dem AD eine Liste aller Benutzer bzw. aller Computer erzeuge in der zusätzlich zum Namen auch die Organisationseinheit und, ganz wichtig, das Anlagedatum im AD steht?

sakura 15. Okt 2007 13:20

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Hi Sharky,

fast einfach. Ein bissle ADO und eine spezielle Funktion (VBGetObject) erledigen die Aufgabe:
Delphi-Quellcode:
procedure TYourForm.btnSearchClick(Sender: TObject);
var
  Conn: _Connection;
  Cmd: _Command;
  RS: _Recordset;
  Affected: OleVariant;
  Line: string;
  Obj: IADsUser;
  procedure RunQuery(Query: string);
  begin
    Cmd.CommandText := Query;
    // run query and return domain list
    RS := Cmd.Execute(Affected, EmptyParam, 0);
    if RS.EOF then
      Exit;
     
    RS.MoveFirst;
    while not RS.EOF do
    begin
      try
        Obj := VBGetObject(RS.Fields.Item[1].Value) as IADsUser;
        Line := Format('%s, %s, %s, %s', [RS.Fields.Item[0].Value, RS.Fields.Item[1].Value, RS.Fields.Item[2].Value, Obj.Parent]);
        mmoReport.Lines.Add(Line);
      except
      end;
      RS.MoveNext;
    end;
  end;
begin
  mmoReport.Clear;

  // create objects
  Conn := CoConnection.Create;
  Cmd := CoCommand.Create;
  // setup objects
  Conn.Provider := 'ADsDSOObject';
  Conn.Open('Active Directory Provider', '', '', 0);
  Cmd.Set_ActiveConnection(Conn);
  Cmd.Properties.Item['Page Size'].Value := 1000;
  Cmd.Properties.Item['Searchscope'].Value := ADS_SCOPE_SUBTREE;

  RunQuery(edtQuery.Text);
Die Funktion VBGetObject:
Delphi-Quellcode:
function VBGetObject(const Name: AnsiString): IDispatch;
var
  BindContext: IBindCtx;
  Moniker: IMoniker;
  Eaten: Integer;
begin
  OleCheck(CreateBindCtx(0, BindContext));
  OleCheck(MkParseDisplayName(BindContext, PWideChar(WideString(Name)), Eaten, Moniker));
  OleCheck(Moniker.BindToObject(BindContext, nil, IDispatch, Result));
end;
Das Format der Query:
Zitat:

SELECT Name, ADsPath, whenCreated FROM 'LDAP://DC=fabrikam,DC=com' WHERE objectCategory='User'
bzw.
SELECT Name, ADsPath, whenCreated FROM 'LDAP://DC=fabrikam,DC=com' WHERE objectCategory='Computer'
Das volle Beispiel findest Du in meinem Blog ;)

RWarnecke 15. Okt 2007 13:24

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Du kannt das ganze über LDAP machen.
Für die Benutzer würde ich folgende LDAP-Attribute verwenden :
  • Zur Bestimmung ob es ein Userobject ist, muss die Objectklasse Person und organizationalPerson vorhanden sein.
  • Für das Erstellungsdatum das Attribute whenCreated.
  • Für den vollen Namen das Attribute Name

Sharky 15. Okt 2007 14:16

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Zitat:

Zitat von sakura
Hi Sharky,

fast einfach. Ein bissle ADO und eine spezielle Funktion (VBGetObject) erledigen die Aufgabe. ..

Hai sakura,

woher kommt denn die Deklaration für IADsUser, CoConnection und CoCommand?

sakura 15. Okt 2007 14:37

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Zitat:

Zitat von Sharky
woher kommt denn die Deklaration für IADsUser, CoConnection und CoCommand?

IAdsUser kommt aus ActiveDs_TLB (Import der AD-Library, siehe Download) und die anderen aus ADOInt (ADO-Lib von von Borland).

...:cat:...

Sharky 16. Okt 2007 06:33

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Zitat:

Zitat von sakura
.... siehe Download) ...

:bounce1: Du bist mein Held im Erdbeerfeld :bounce1:

DP-Maintenance 16. Okt 2007 07:56

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Windows 9x / ME / 2000 / XP / 2003 / Vista" nach "Sonstige Fragen zu Delphi" verschoben.
Da es zu einem Delphi-Thread wurde verschiebe ich ihn mal.

sakura 16. Okt 2007 12:59

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Sage mal, hast Du was mit dem Download anfangen können und hilft es wie gewollt weiter und viel wichtiger, klappt es bei Dir? ;)

...:cat:...

Sharky 16. Okt 2007 13:34

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Zitat:

Zitat von sakura
... und viel wichtiger, klappt es bei Dir?...

Hai Du,

der Download funktionierte und es klappt wunderbar. Ich weiss jetzt auf die Minute genau wann ein Rechner im AD eingetragen wurde.

potsbew 17. Okt 2007 15:36

Re: Active Directory: Benutzer/Computer mit Anlagedatum?
 
Hallo allerseits,
habe das Programm getestet und funktioniert auch gut. Jetzt wollte ich es anpassen, um von einem OpneLDAP-Server einzelne Benutzer aus der Struktur inclusive bestimmter Attribute auszulesen.
Aber das gelingt mir überhaupt nicht. Es scheitert schon immer beim Verbindungsaufbau mit dem LDAP-Server.
Könnte jemand das o.b. Script für einen externen LDAP-Server anpassen?
Danke.


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