Freigeben über


Exemplarische Vorgehensweise: Hinzufügen von Active Directory-Objekten mit Visual J#

Die Prozeduren in diesem Thema demonstrieren die Verwendung der DirectoryEntry-Komponente, um Benutzer, Gruppen und Dienste auf dem lokalen Computer aufzulisten. Die DirectoryEntry-Komponente verwendet dafür die Active Directory-Technik. Jeder von der Komponente erstellte Eintrag enthält eine Liste ihrer Eigenschaften.

So erstellen Sie eine Benutzeroberfläche

  1. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  2. Wählen Sie im Dialogfeld Neues Projekt im linken Bereich zunächst Visual J# und dann die Vorlage Windows-Anwendung. Nennen Sie das Projekt ActiveDirectory.

  3. Ziehen Sie in der Toolbox von der Registerkarte Windows Forms ein TreeView-Steuerelement auf Form1.

  4. Legen Sie viewPC für die Name-Eigenschaft des TreeView-Steuerelements fest.

    Das TreeView-Steuerelement wird später noch so geändert, dass es drei Knoten der obersten Ebene enthält, und zwar je einen Knoten für Benutzer, Gruppen und Dienste. Jeder Knoten der zweiten Ebene stellt einen Benutzer, eine Gruppe oder einen Dienst dar, der/die auf Ihrem Computer registriert ist. Jeder Benutzer, jede Gruppe und jeder Dienst besitzt zwei untergeordnete Knoten, einen für seinen Active Directory-Pfad und einen für seine Eigenschaften.

So konfigurieren Sie eine DirectoryEntry-Komponente

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und klicken Sie dann im Kontextmenü auf Verweis hinzufügen.

  2. Fügen Sie einen Verweis zur System.DirectoryServices.dll hinzu.

  3. Ziehen Sie in der Toolbox von der Registerkarte Komponenten eine DirectoryEntry-Komponenteninstanz auf den Designer.

  4. Legen Sie entryPC für die Name-Eigenschaft der DirectoryEntry-Komponente fest.

  5. Legen Sie für die Path-Eigenschaft der DirectoryEntry-Komponente WinNT://Domäne/IhrComputername fest. Verwenden Sie die Domäne und den Namen Ihres Computers, um die DirectoryEntry-Komponente anzuweisen, Ihren lokalen Computer mit dem WinNT-Dienstprovider für Active Directory zu überprüfen.

    Hinweis   Wenden Sie sich an Ihren Systemadministrator, wenn Sie die Domäne oder den Namen des Computers nicht kennen.

So fügen Sie die Knoten der obersten Ebene zum TreeView-Steuerelement hinzu

  1. Doppelklicken Sie im Designer auf Form1, um den Form_Load-Ereignishandler im Code-Editor zu erstellen.

  2. Fügen Sie diese Anweisung am Anfang der Datei hinzu, um den System.DirectoryServices-Namespace in Ihren Code zu integrieren. Sie sollte unmittelbar auf die package-Anweisung folgen.

    // Visual J#
    import System.DirectoryServices.*;
    
  3. Fügen Sie Code zum Load-Ereignishandler hinzu, um die drei Knoten der obersten Ebene für Benutzer, Gruppen und Dienste zu erstellen. Der Code sieht wie folgt aus:

    // Visual J#
    private void Form1_Load (Object sender, System.EventArgs e)
    {
       TreeNode users = new TreeNode("Users");
       TreeNode groups = new TreeNode("Groups");
       TreeNode services = new TreeNode("Services");
       viewPC.get_Nodes().AddRange(new TreeNode[] { users, groups, services });
    }
    

Wenn die Anwendung ausgeführt wird, enthält die Children-Eigenschaft der Komponente mit dem Namen entryPC alle Einträge, die in Path (Ihrem Computer) gefunden wurden. Jedes untergeordnete Element ist ebenfalls ein DirectoryEntry-Objekt. Da Sie den WinNT-Provider in einem Computerpfad verwenden, ist die SchemaClassName-Eigenschaft des untergeordneten DirectoryEntry-Objekts "User", "Group" oder "Service". Mit einer if-Anweisung können Sie den Eingabetyp festlegen und einen Knoten zur richtigen Gruppe hinzufügen.

So fügen Sie die Eintragsknoten zum TreeView-Steuerelement hinzu

  1. Fügen Sie diesen Code am Ende des oben hinzugefügten Codes zu Form1_Load hinzu, um die DirectoryEntry-Objekte aufzulisten, die in der entryPC-Instanz enthalten sind.

    // Visual J#
    System.Collections.IEnumerator enum1 = ((System.DirectoryServices.DirectoryEntries)entryPC. get_Children()).GetEnumerator();
    while(enum1.MoveNext())
    {
       DirectoryEntry child =(System.DirectoryServices.DirectoryEntry) enum1.get_Current();
       // Code added here in next steps.
    }
    
  2. Fügen Sie im Code von Schritt 1 den folgenden Code hinzu, um einen neuen Knoten für den untergeordneten Verzeichniseintrag zu erstellen. Fügen Sie ihn anschließend zum entsprechenden Knoten der obersten Ebene hinzu.

    // Visual J#
    TreeNode newNode = new TreeNode(child.get_Name());
    String name = child.get_SchemaClassName();
    if (name.equals("User"))
    {
       users.get_Nodes().Add(newNode); 
    }
    else if(name.equals("Group"))
    {
       groups.get_Nodes().Add(newNode);
    }
    else if(name.equals("Service"))
    {
       services.get_Nodes().Add(newNode); 
    }
    
  3. Fügen Sie die folgende Anweisung hinter der else if-Anweisung hinzu, um Knoten für den Pfad und die Eigenschaften des Eintrags hinzuzufügen. Die zu schreibende AddPathAndProperties-Methode fügt Knoten für den Pfad sowie Eigenschaften des Eintrags hinzu.

    // Visual J#
    AddPathAndProperties(newNode, child);
    

    Hinweis   Die AddPathAndProperties-Methode wird im nächsten Abschnitt hinzugefügt.

    Die vollständige Form_Load-Methode sieht folgendermaßen aus:

    // Visual J#
    private void Form1_Load (Object sender, System.EventArgs e)
    {
       TreeNode users = new TreeNode("Users");
       TreeNode groups = new TreeNode("Groups");
       TreeNode services = new TreeNode("Services");
       viewPC.get_Nodes().AddRange(new TreeNode[] { users, groups, services });
    
       System.Collections.IEnumerator enum1 = ((System.DirectoryServices.DirectoryEntries)entryPC. get_Children()).GetEnumerator();
       while(enum1.MoveNext())
       {
          DirectoryEntry child =(System.DirectoryServices.DirectoryEntry) enum1.get_Current();
          TreeNode newNode = new TreeNode(child.get_Name());
          String name = child.get_SchemaClassName();
          if (name.equals("User"))
          {
             users.get_Nodes().Add(newNode); 
          }
          else if(name.equals("Group"))
          {
             groups.get_Nodes().Add(newNode);
          }
          else if(name.equals("Service"))
          {
             services.get_Nodes().Add(newNode); 
          }
          AddPathAndProperties(newNode, child);
       }
    }
    

Die DirectoryEntry-Komponente besitzt eine Properties-Eigenschaft, die eine zeichenfolgenindizierte Auflistung von Eigenschaften enthält. Der Inhalt dieser Auflistung richtet sich nach dem Schema der DirectoryEntry-Komponente. Die Properties-Auflistung hat eine PropertyNames-Eigenschaft, bei der es sich um eine Auflistung aller Namen der Eigenschaften handelt. Wenn Sie diese Auflistung Schritt für Schritt durchgehen, können Sie die einzelnen Eigenschaften abrufen. Jede Eigenschaft besitzt auch eine Auflistung der zugeordneten Werte. Bei dieser exemplarischen Vorgehensweise wird nur der erste Wert jeder Eigenschaft abgerufen.

So listen Sie Pfad und Eigenschaften des Eintrags auf

  1. Fügen Sie den folgenden Code zur Form1-Klasse hinzu, um die AddPathAndProperties-Methode zu erstellen: Der entry-Parameter stellt einen Eintrag im Verzeichnis (einen Benutzer, eine Gruppe oder einen Dienst) dar. Der node-Parameter stellt das TreeNode-Objekt dar, das diesem Eintrag zugeordnet ist.

    // Visual J#
    private void AddPathAndProperties(TreeNode node, DirectoryEntry entry)
    {
    }
    
  2. Fügen Sie diesen Code hinzu, um einen neuen Knoten zu erstellen, der den Pfad des Eintrags anzeigt.

    // Visual J#
    node.get_Nodes().Add(new TreeNode("Path: " + entry.get_Path()));
    
  3. Fügen Sie diesen Code hinzu, um einen übergeordneten Knoten für die Eigenschaften zu erstellen.

    // Visual J#
    TreeNode propertyNode = new TreeNode("Properties");
    node.get_Nodes().Add(propertyNode);
    
  4. Fügen Sie diesen Code hinzu, um für jede Eigenschaft des Eintrags einen neuen Knoten zu erstellen. Eigenschaftenname und -wert werden für jede Eigenschaft angezeigt.

    // Visual J#
    System.Collections.ICollection params = entry.get_Properties().get_PropertyNames();
    System.Collections.IEnumerator enum2 = params.GetEnumerator();
    while (enum2.MoveNext())
    {
       String oneNode =(String) enum2.get_Current();
       ((System.DirectoryServices.PropertyValueCollection)entry.get_Properties().get_Item(oneNode)).get_Item(0).ToString();
       propertyNode.get_Nodes().Add(new TreeNode(oneNode));
    }
    

    Die vollständige Methode sieht folgendermaßen aus:

    // Visual J#
    private void AddPathAndProperties(TreeNode node, DirectoryEntry entry)
    {
       node.get_Nodes().Add(new TreeNode("Path: " + entry.get_Path()));
       TreeNode propertyNode = new TreeNode("Properties");
       node.get_Nodes().Add(propertyNode);
       System.Collections.ICollection params = entry.get_Properties().get_PropertyNames();
       System.Collections.IEnumerator enum2 = params.GetEnumerator();
       while (enum2.MoveNext())
       {
          String oneNode =(String) enum2.get_Current();
          ((System.DirectoryServices.PropertyValueCollection)entry.get_Properties().get_Item(oneNode)).get_Item(0).ToString();
          propertyNode.get_Nodes().Add(new TreeNode(oneNode));
       }
    }
    

So führen Sie das Programm aus

  1. Drücken Sie F5, um das Programm auszuführen.
  2. Öffnen Sie die Knoten, um die Pfade und Eigenschaften zu überprüfen. Alle Benutzer verwenden dieselbe Gruppe von Eigenschaften, da alle dasselbe Schema benutzen. Dasselbe gilt für Gruppen- und Dienstknoten.

Nächste Schritte

In dieser exemplarischen Vorgehensweise wurde der WinNT-Dienstprovider für Active Directory verwendet. Es stehen auch andere Dienste zur Verfügung, einschließlich Lightweight Directory Access Protocol (LDAP), Novell NetWare Directory Service (NDS) und der Novell Netware 3.x-Dienst (NWCOMPAT). Jeder Dienstprovider stellt eine andere Gruppe von Objekten bereit, mit denen Sie Verzeichnisse überprüfen und bearbeiten können.

Die DirectorySearcher-Komponente kann zum Suchen nach Einträgen von einem Stammpfad verwendet werden. Der DirectorySearcher arbeitet mit dem LDAP-Provider.

Siehe auch

Erstellen von Active Directory-Komponenten | Hintergrundinformationen zur Active Directory-Technologie | DirectoryEntry-Klasse | DirectorySearcher-Klasse | Exemplarische Vorgehensweisen für Framework-Dienstkomponenten