Partager via


Procédure pas à pas : affichage des objets d'annuaire local

Les procédures de cette rubrique montrent comment utiliser DirectoryEntry pour obtenir la liste des utilisateurs, groupes et services qui se trouvent sur votre ordinateur local. DirectoryEntry utilise la technologie des services de domaine Active Directory pour accéder à ces informations. Chaque entrée créée par le composant contient une liste de ses propriétés.

Pour créer l'interface utilisateur

  1. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Fichier.

  2. Dans la boîte de dialogue Nouveau projet, dans le volet de gauche, sélectionnez Visual Basic .NET, Visual C# ou Visual J#, puis choisissez le modèle Application Windows. Appelez le projet « ActiveDirectory ».

  3. Sous l'onglet Windows Forms de la boîte à outils, faites glisser un contrôle TreeView jusqu'à Form1.

  4. Attribuez à la propriété Name du contrôle TreeView la valeur « viewPC ». Le contrôle TreeView sera modifié ultérieurement dans la procédure pas à pas pour inclure trois nœuds du niveau supérieur, un pour les utilisateurs, un pour les groupes et un pour les services. Chaque nœud de second niveau représentera un utilisateur, un groupe ou un service inscrit sur votre ordinateur. Chaque utilisateur, groupe et service disposera de deux nœuds enfants, un pour son chemin de services de domaine Active Directory et l'autre pour ses propriétés.

Pour configurer un composant DirectoryEntry

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur votre projet, puis cliquez sur Ajouter une référence dans le menu contextuel.

  2. Ajoutez une référence à « System.DirectoryServices.dll ».

  3. À partir de l'onglet Composants de la boîte à outils, faites glisser une instance du composant DirectoryEntry jusqu'au concepteur.

  4. Attribuez à la propriété Name du composant DirectoryEntry la valeur « entryPC ».

  5. Attribuez à la propriété Path du composant DirectoryEntry la valeur WinNT://Domaine/VotreNomOrdinateur. Utilisez votre domaine et le nom de votre ordinateur pour indiquer au composant DirectoryEntry d'examiner l'ordinateur local à l'aide du fournisseur de services WinNT pour les services de domaine Active Directory.

    Remarque :
    Si le nom du domaine ou de l'ordinateur est incorrect, l'application lève une exception au moment de l'exécution. Si vous entrez le chemin WinNT://VotreNomOrdinateur, le fournisseur de services essaie de localiser l'ordinateur.

Pour ajouter les nœuds de niveau supérieur au contrôle TreeView

  1. Dans le concepteur, double-cliquez sur Form1 pour créer le gestionnaire d'événements Form_Load dans l'éditeur de code.

  2. Modifiez la méthode Form1_Load en ajoutant le code nécessaire à la création des trois nœuds de niveau supérieur pour les utilisateurs, les groupes et les services. Lors de l'exécution de l'application, la propriété Children du composant entryPC contient toutes les entrées trouvées dans Path (votre ordinateur). Chaque enfant est également un objet DirectoryEntry. Dans la mesure où vous utilisez le fournisseur WinNT sur le chemin d'accès d'un ordinateur, la propriété SchemaClassName de l'objet DirectoryEntry enfant sera « Utilisateur », « Groupe » ou « Service ». Utilisez une instruction select ou switch pour ajouter un nœud au groupe approprié, en fonction du type d'entrée d'annuaire indiqué par la propriété SchemaClassName.

    Vous écrirez la méthode AddPathAndProperties à l'étape suivante.

    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);
       }
    }
    
  3. Ajoutez le code suivant à la classe Form1 pour créer la méthode AddPathAndProperties. Le paramètre node représente l'objet TreeNode associé à cette entrée. Le paramètre entry représente une entrée dans l'annuaire : un utilisateur, un groupe ou un service.

    Le composant DirectoryEntry possède une propriété Properties qui contient une collection de propriétés indexées par chaîne. Le contenu de cette collection dépend du schéma du composant DirectoryEntry. La collection Properties possède une propriété PropertyNames, qui est une collection de tous les noms de propriétés. En parcourant cette collection, vous pouvez récupérer chacune des propriétés. Chaque propriété possède également une collection de valeurs associées. Cette méthode permet de récupérer uniquement la première valeur de chaque propriété.

    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));
       }
    }
    

Pour exécuter le programme

  1. Appuyez sur F5 pour exécuter le programme.

  2. Ouvrez les nœuds pour examiner les chemins d'accès et les propriétés. Les utilisateurs partagent tous le même ensemble de propriétés puisqu'ils partagent tous le même schéma. C'est également le cas des nœuds des groupes et des services.

Cette procédure pas à pas utilisait le fournisseur de services WinNT pour les services de domaine Active Directory. D'autres services sont disponibles, notamment LDAP (Lightweight Directory Access Protocol), NDS (Novell NetWare Directory Service) et NWCOMPAT (le service Novell Netware 3.x). Chaque fournisseur propose un ensemble d'objets différent permettant d'examiner et de manipuler les annuaires.

DirectorySearcher permet de rechercher des entrées d'un chemin d'accès racine. DirectorySearcher fonctionne avec le fournisseur LDAP.

Voir aussi

Référence

System.DirectoryServices
DirectoryEntry
DirectorySearcher

Concepts

Mise en route dans System.DirectoryServices

Send comments about this topic to Microsoft.

Copyright © 2007 par Microsoft Corporation. Tous droits réservés.