Announcement

Collapse
No announcement yet.

NT/2000-Benutzerverwaltung benutzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NT/2000-Benutzerverwaltung benutzen

    Hat das schon mal einer gefragt? Wenn ja, wo kann ich was dazu finden? Ich würd´ gern den Dialog mit allen Benutzern einer NT-Workstation anzeigen und vielleicht sogar die Infos daraus verwenden.

    But, all I need is more information! )

    Mal seh´n, ob das Problem für Hagen schwerer ist. *grins*

  • #2
    Hallo,

    wenn <b>ADSI</b> (Active Directory Service Interface) auf diesem Rechner zur Verfügung steht (was bei Windows 2000 immer der Fall ist), ist das Auslesen der Benutzerdaten und das Anlegen neuer Benutzer einfach. In der TEdit-Instanz werden die Daten des jeweiligen Rechners (Bsp: "WinNT://D7-700") angefordert:
    <pre>
    { ************************************************** *******************
    Autor : Andreas Kosch
    Compiler : Delphi 5 UpdatePack#1
    Betriebssystem : Windows 2000
    Datum : 11.08.2000
    Beschreibung : ADSI mit Delphi 5: Benutzer auslesen/anlegen
    ************************************************** ******************** }

    unit ADSI_5Frm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, ComCtrls, ActiveDS_TLB;

    type
    TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    GroupBox1: TGroupBox;
    EditObj: TEdit;
    ButtonConnect: TButton;
    GroupBox2: TGroupBox;
    ListBoxUser: TListBox;
    ButtonRefresh: TButton;
    ButtonAddUser: TButton;
    EditNewUser: TEdit;
    procedure ButtonConnectClick(Sender: TObject);
    procedure ButtonRefreshClick(Sender: TObject);
    procedure ButtonAddUserClick(Sender: TObject);
    private
    { Private-Deklarationen }
    FADSCont : IADsContainer;
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    uses ComObj, ActiveX;

    // ADSI-Hilfsfunktion als Ersatz für die VBScript-Funktion GetObject
    function ADsGetObject(lpszPathName: PWideChar;
    const riid: TIID;
    out obj): HResult; stdcall; external 'activeds.dll';

    procedure TForm1.ButtonConnectClick(Sender: TObject);
    var
    swObj : WideString;
    begin
    swObj := EditObj.Text;
    OleCheck(ADsGetObject(PWideChar(swObj), IID_IADsContainer, FADSCont));
    StatusBar1.SimpleText := 'ADsGetObject war erfolgreich.';
    ButtonRefresh.Enabled := True;
    ButtonAddUser.Enabled := True;
    end;

    procedure TForm1.ButtonRefreshClick(Sender: TObject);
    var
    sUser : String;
    aEnum : IEnumVariant;
    vObj : OLEVariant;
    aADs : IAds;
    aADSUser : IADsUser;
    iCelt : LongWord;
    begin
    ListBoxUser.Items.Clear;
    aEnum := FADSCont._NewEnum as IEnumVariant;
    while (aEnum.Next(1, vObj, iCelt) = S_OK) do
    begin
    aADs := IUnknown(vObj) as IAds;
    if aADs.Class_ = 'User' then
    begin
    aADSUser := aADs as IAdsUser;
    sUser := Format('%s (%s)', [aADSUser.Name + Chr(9),
    aADSUser.Description]);
    ListBoxUser.Items.Add(sUser);
    end;
    end;
    end;

    procedure TForm1.ButtonAddUserClick(Sender: TObject);
    var
    swNewUserName : WideString;
    swDescription : WideString;
    aADSUser : IADsUser;
    begin
    swNewUserName := EditNewUser.Text;
    swDescription := 'Benutzer wurde von ADSI_5.EXE anlegt.';
    aADSUser := FADSCont.Create('user', swNewUserName) as IADsUser;
    aADSUser.Set_Description(swDescription);
    aADSUser.SetInfo;
    ButtonRefreshClick(self);
    end;

    end.
    </pre&gt

    Comment


    • #3
      Hallo Herr Kosch,
      und wie ist das mit den Benutzern, die im lokalen Netzwerk bekannt sind? Ich habe mich missverständlich ausgedrückt, denn eigentlich geht es mir darum, diesen Dialog anzuzeigen. Sie kennen das beispielsweise von der Rechtevergabe, wo Sie Zugriffsrechte auf Verzeichnisse für spezielle Benutzer einstellen können.

      Da es diesen Dialog auch unter Win9x gibt, sofern man die Freigabe auf Benutzerebene umstellt und den Server angibt, auf dem die entsprechenden Userdaten sind, dachte ich: vielleicht gibt es einen Dialog, der einem die Benutzer anzeigt, damit man einen oder mehrere auswählen kann.

      Und zu Ihrer Funktion oben: Sie schreiben unter Win2000 sollte es problemlos klappen. Und wenn ich jetzt sicherstellen müsste, dass ein Programm auch unter NT den Zweck erfüllt, was müsste ich dann beachten

      Comment


      • #4
        Hallo,

        wenn der Domänen-Kontroller abgefragt wird, tauchen dort alle bekannten Benutzer auf.

        Der ADSI-Client läuft ab Windows 9x auf jeder Win32-Version, solange ein ADS-Server (Active Directory von Windows 2000) im Netz hängt. Die notwendigen Zutaten sind auf der CDROM des <i>Microsoft Platform SDK</i> (wenn ich mich richtig erinnere).

        P.S: Nach dem Orginal-Dialog habe ich noch nie gesucht, aber man wird ihn sicherlich direkt aufrufen können

        Comment


        • #5
          Das probier´ ich mal aus, Herr Kosch. Vielen Dank für Ihre Antwort. Nebenbei: ich war kürzlich mal ein (wie sagten Sie "fleißiger" Entwickler und habe mal ´ne NON-VCL-Exe geschrieben. Anhand Ihres Beispiels hier im Forum.

          Der Aufwand hat sich in dem Fall zwar gelohnt, aber immer möchte ich das auch nicht so machen. )

          Gruß.
          Mathias

          Comment

          Working...
          X