Procedura dettagliata: visualizzazione di oggetti directory locali

Nelle procedure di questa sezione viene illustrato come utilizzare DirectoryEntry per elencare gli utenti, i gruppi e i servizi che si trovano sul computer locale. DirectoryEntry utilizza la tecnologia Servizi di dominio Active Directory per accedere a queste informazioni. Ogni voce creata dal componente contiene un elenco delle proprietà relative.

Per creare l'interfaccia utente

  1. Scegliere Nuovo dal menu File, quindi scegliere Progetto.

  2. Nella finestra di dialogo Nuovo progetto, nel riquadro sinistro, scegliere Visual Basic .NET, Visual C# o Visual J#, quindi scegliere il modello Applicazione Windows. Denominare il progetto ActiveDirectory.

  3. Nella scheda Windows Form della casella degli strumenti, trascinare un controllo TreeView su Form1.

  4. Impostare la proprietà Name del controllo TreeView su "viewPC". Il controllo TreeView verrà modificato successivamente nella procedura dettagliata, in modo che contenga tre nodi di primo livello, uno per gli utenti, uno per i gruppi e uno per i servizi. Ogni nodo di livello secondario rappresenterà un utente, un gruppo o un servizio registrato sul computer. Ogni utente, gruppo e servizio avrà due nodi figlio, uno per il percorso di Servizi di dominio Active Directory e uno per le proprietà relative.

Per configurare un componente DirectoryEntry

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Aggiungi riferimento nel menu di scelta rapida.

  2. Aggiungere un riferimento a "System.DirectoryServices.dll".

  3. Dalla scheda Componenti della casella degli strumenti, trascinare un componente DirectoryEntry nella finestra di progettazione.

  4. Impostare la proprietà Name del componente DirectoryEntry su "entryPC".

  5. Impostare la proprietà Path del componente DirectoryEntry su WinNT://Dominio/NomeComputerInUso. Utilizzare il dominio e il nome computer in uso per indicare al componente DirectoryEntry di esaminare il computer locale utilizzando il provider di servizi WinNT per Servizi di dominio Active Directory.

    Nota:
    Se si utilizza un dominio o un nome computer non corretti, l'applicazione genererà un'eccezione in fase di esecuzione. Se si immette WinNT://NomeComputerInUso per il percorso, il provider di servizi tenterà di individuare il computer.

Per aggiungere nodi di primo livello al controllo TreeView

  1. Nella finestra di progettazione fare doppio clic su Form1 per creare il gestore eventi Form_Load nell'editor di codice.

  2. Modificare il metodo Form1_Load aggiungendo il codice necessario a creare i tre nodi di primo livello per utenti, gruppi e servizi. Quando l'applicazione viene eseguita, la proprietà Children del componente chiamato entryPC conterrà tutte le voci trovate in Path (il computer in uso). Ogni elemento figlio è anche un oggetto DirectoryEntry. Poiché si sta utilizzando il provider WinNT in un percorso di computer, la proprietà SchemaClassName dell'oggetto figlio DirectoryEntry sarà "User", "Group" o "Service". Utilizzare un'istruzione select o switch per aggiungere un nodo al gruppo corretto, a seconda del tipo di voce di directory indicato dalla proprietà SchemaClassName.

    Nel prossimo passaggio verrà scritto il metodo AddPathAndProperties.

    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. Aggiungere il codice seguente alla classe Form1 per creare il metodo AddPathAndProperties. Il parametro node rappresenta l'oggetto TreeNode associato a quella voce. Il parametro entry rappresenta una voce nella directory corrispondente a un utente, un gruppo o un servizio.

    Il componente DirectoryEntry dispone di una proprietà Properties che contiene un insieme di proprietà indicizzato per stringa. Il contenuto di questo insieme dipende dallo schema del componente DirectoryEntry. L'insieme Properties dispone di una proprietà PropertyNames che è un insieme di tutti i nomi delle proprietà. Scorrendo questo insieme è possibile recuperare ogni proprietà. Ogni proprietà ha anche un insieme di valori associati. In questo metodo, viene recuperato solo il primo valore per ogni proprietà.

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

Per eseguire il programma

  1. Premere F5 per eseguire il programma.

  2. Aprire i nodi per esaminare i percorsi e le proprietà. Tutti gli utenti condividono lo stesso insieme di proprietà perché condividono tutti lo stesso schema. Lo stesso vale per i nodi gruppo e servizio.

In questa procedura dettagliata è stato utilizzato il provider di servizi WinNT per Servizi di dominio Active Directory. Sono disponibili altri servizi, compresi LDAP (Lightweight Directory Access Protocol), NDS (Novell NetWare Directory Service) e NWCOMPAT (Novell Netware 3.x). Ogni provider fornisce un insieme diverso di oggetti che consentono di esaminare e modificare le directory.

È possibile utilizzare DirectorySearcher per cercare le voci da un percorso radice. DirectorySearcher funziona con il provider LDAP.

Vedere anche

Riferimenti

System.DirectoryServices
DirectoryEntry
DirectorySearcher

Concetti

Introduzione a System.DirectoryServices

Send comments about this topic to Microsoft.

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.