Exemplarische Vorgehensweise: Anzeigen von lokalen Verzeichnisobjekten
Die Verfahren in diesem Thema veranschaulichen, wie mit DirectoryEntry die Benutzer, Gruppen und Dienste aufgelistet werden können, die sich auf dem lokalen Computer befinden. DirectoryEntry verwendet die Technologie der Active Directory-Domänendienste, um auf diese Informationen zuzugreifen. Jeder von der Komponente erstellte Eintrag enthält eine Liste der zugehörigen Eigenschaften.
So erstellen Sie die Benutzeroberfläche
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Wählen Sie im Dialogfenster Neues Projekt im linken Bereich Visual Basic .NET, Visual C# oder Visual J# aus. Wählen Sie die Vorlage Windows-Anwendung aus. Geben Sie dem Projekt den Namen "ActiveDirectory".
Ziehen Sie von der Registerkarte Windows Forms der Toolbox ein TreeView-Steuerelement in Form1.
Legen Sie die Name-Eigenschaft des TreeView-Steuerelements auf "viewPC" fest. Das TreeView-Steuerelement wird später in der exemplarischen Vorgehensweise geändert und enthält dann drei Knoten auf oberster Ebene, jeweils einen für Benutzer, Gruppen und Dienste. Jeder Knoten auf der zweiten Ebene stellt einen Benutzer, eine Gruppe oder einen Dienst dar, der/die im Computer registriert ist. Alle Benutzer, Gruppen und Dienste verfügen über zwei untergeordnete Knoten, jeweils einen für den zugehörigen Pfad der Active Directory-Domänendienste und einen für die Eigenschaften.
So konfigurieren Sie eine DirectoryEntry-Komponente
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie im Kontextmenü Verweis hinzufügen aus.
Fügen Sie einen Verweis zu "System.DirectoryServices.dll" hinzu.
Ziehen Sie von der Registerkarte Komponenten der Toolbox eine DirectoryEntry-Komponenteninstanz in den Designer.
Legen Sie die Name-Eigenschaft der DirectoryEntry-Komponente auf "viewPC" fest.
Legen Sie die Path-Eigenschaft der DirectoryEntry-Komponente auf WinNT://Domäne/Computername fest. Über Domäne und Computername wird die DirectoryEntry-Komponente angewiesen, den lokalen Computer mit dem WinNT-Dienstanbieter für die Active Directory-Domänendienste zu untersuchen.
Hinweis: Wenn Sie einen falschen Domänen- oder Computernamen verwenden, löst die Anwendung zur Laufzeit eine Ausnahme aus. Wenn Sie WinNT://Computername für den Pfad eingeben, versucht der Dienstanbieter, den Computer zu finden.
So fügen Sie dem TreeView-Steuerelement Knoten auf oberster Ebene hinzu
Doppelklicken Sie im Designer auf Form1, um den Form_Load-Ereignishandler im Code-Editor zu erstellen.
Ändern Sie die Form1_Load-Methode, indem Sie den erforderlichen Code hinzufügen, um drei Knoten auf oberster Ebene für Benutzer, Gruppen und Dienste zu erstellen. Bei der Ausführung der Anwendung enthält die Children-Eigenschaft der Komponente mit dem Namen entryPC alle im Pfad gefundenen Einträge (dem jeweiligen Computer). Jedes untergeordnete Element ist auch ein DirectoryEntry-Objekt. Da der WinNT-Anbieter für einen Computerpfad verwendet wird, lautet die SchemaClassName-Eigenschaft des untergeordneten DirectoryEntry-Objekts entweder "User", "Group" oder "Service". Verwenden Sie eine select- oder switch-Anweisung, um abhängig vom Typs des Verzeichniseintrags, der durch die SchemaClassName-Eigenschaft angegeben wird, einen Knoten zu der richtigen Gruppe hinzuzufügen.
Die AddPathAndProperties-Methode wird im nächsten Schritt geschrieben.
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim users As New TreeNode("Users") Dim groups As New TreeNode("Groups") Dim services As New TreeNode("Services") viewPC.Nodes.AddRange(New TreeNode() {users, groups, services}) Dim child As System.DirectoryServices.DirectoryEntry For Each child In entryPC.Children Dim newNode As New TreeNode(child.Name) Select Case child.SchemaClassName Case "User" users.Nodes.Add(newNode) Case "Group" groups.Nodes.Add(newNode) Case "Service" services.Nodes.Add(newNode) End Select AddPathAndProperties(newNode, child) Next End Sub
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.Nodes.AddRange(new TreeNode[] { users, groups, services }); foreach(System.DirectoryServices.DirectoryEntry child in entryPC.Children) { TreeNode newNode = new TreeNode(child.Name); switch (child.SchemaClassName) { case "User" : users.Nodes.Add(newNode); break; case "Group" : groups.Nodes.Add(newNode); break; case "Service" : services.Nodes.Add(newNode); break; } AddPathAndProperties(newNode, child); } }
Fügen Sie der Form1-Klasse den folgenden Code hinzu, um die AddPathAndProperties-Methode zu erstellen. Der node-Parameter stellt das dem betreffenden Eintrag zugeordnete TreeNode-Objekt dar. Der entry-Parameter stellt einen Eintrag im Verzeichnis dar (einen Benutzer, eine Gruppe oder ein Dienst).
Die DirectoryEntry-Komponente verfügt über eine Properties-Eigenschaft, die eine zeichenfolgeindizierte Auflistung von Eigenschaften enthält. Der Inhalt dieser Auflistung hängt vom Schema der DirectoryEntry-Komponente ab. Die Properties-Auflistung verfügt über eine PropertyNames-Eigenschaft, bei der es sich um eine Auflistung aller Eigenschaftennamen handelt. Durch schrittweises Durchlaufen dieser Auflistung können Sie die einzelnen Eigenschaften abrufen. Jede Eigenschaft verfügt ebenfalls über eine Auflistung der zugehörigen Werte. In dieser Methode wird lediglich der erste Wert für die einzelnen Eigenschaften abgerufen.
Private Sub AddPathAndProperties(ByVal node As TreeNode, _ ByVal entry As System.DirectoryServices.DirectoryEntry) node.Nodes.Add(New TreeNode("Path: " & entry.Path)) Dim propertyNode As New TreeNode("Properties") node.Nodes.Add(propertyNode) Dim propertyName As String Dim oneNode As String For Each propertyName In entry.Properties.PropertyNames Try oneNode = propertyName & ": " & _ CType(entry.Properties(propertyName)(0), String) Catch oneNode = propertyName & ": " & _ "No text representation." End Try propertyNode.Nodes.Add(New TreeNode(oneNode)) Next End Sub
private void AddPathAndProperties(TreeNode node, System.DirectoryServices.DirectoryEntry entry) { node.Nodes.Add(new TreeNode("Path: " + entry.Path)); TreeNode propertyNode = new TreeNode("Properties"); node.Nodes.Add(propertyNode); foreach (string propertyName in entry.Properties.PropertyNames) { string oneNode = propertyName + ": " + entry.Properties[propertyName][0].ToString(); propertyNode.Nodes.Add(new TreeNode(oneNode)); } }
So führen Sie das Programm aus
Drücken Sie F5, um das Programm auszuführen.
Öffnen Sie die Knoten, um die Pfade und die Eigenschaften zu durchsuchen. Alle Benutzer weisen dieselben Eigenschaften auf, weil sie alle dasselbe Schema verwenden. Das Gleiche gilt für die Gruppen- und Dienstknoten.
In dieser exemplarischen Vorgehensweise wurde der WinNT-Dienstanbieter für die Active Directory-Domänendienste verwendet. Es sind andere Dienste verfügbar, z. B. LDAP (Lightweight Directory Access Protocol), NDS (Novell NetWare Directory Service) und NWCOMPAT (Novell Netware 3.x). Jeder Anbieter stellt andere Objekte bereit, mit denen Sie Verzeichnisse untersuchen und bearbeiten können.
Mit DirectorySearcher können Einträge in einem Stammpfad gesucht werden. DirectorySearcher verwendet den LDAP-Anbieter.
Siehe auch
Referenz
System.DirectoryServices
DirectoryEntry
DirectorySearcher
Konzepte
Erste Schritte in System.DirectoryServices
Send comments about this topic to Microsoft.
Copyright © 2007 Microsoft Corporation. Alle Rechte vorbehalten.