Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En los procedimientos de este tema se muestra cómo utilizar DirectoryEntry para enumerar los usuarios, grupos y servicios que se encuentran en el equipo local. DirectoryEntry utiliza la tecnología de Active Directory para tener acceso a esta información. Cada entrada creada por el componente contiene una lista de sus propiedades.
Para crear la interfaz de usuario
En el menú Archivo, elija Nuevo y haga clic en Proyecto.
En el cuadro de diálogo Nuevo proyecto, en el panel izquierdo, elija Visual Basic .Net, Visual C# o Visual J# y, a continuación, elija la plantilla Aplicación para Windows. Asigne el nombre "ActiveDirectory" al proyecto.
En la ficha Windows Forms del cuadro de herramientas, arrastre un control TreeView a Form1
Establezca la propiedad Name del control TreeView en "viewPC". El control TreeView se modificará más adelante en el tutorial, de forma que contenga tres nodos de nivel superior para los usuarios, grupos y servicios respectivamente. Cada nodo de segundo nivel representa a un usuario, grupo o servicio registrado en el equipo. Cada usuario, grupo y servicio tendrá dos nodos secundarios, uno para su ruta de acceso de Active Directory y otro para sus propiedades.
Para configurar un componente DirectoryEntry
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto y haga clic en Agregar referencia en el menú contextual.
Agregue una referencia a "System.DirectoryServices.dll".
En la ficha Componentes del cuadro de herramientas, arrastre una instancia del componente DirectoryEntry hasta el diseñador.
Establezca la propiedad Name del componente DirectoryEntry en "entryPC".
Establezca la propiedad Path del componente DirectoryEntry en WinNT://dominio/nombreDeSuEquipo. Utilice su dominio y el nombre de su equipo para indicar al componente DirectoryEntry que examine el equipo local mediante el proveedor de servicios de WinNT correspondiente a los servicios de dominio de Active Directory.
Nota:Si tiene el nombre de dominio o de equipo incorrecto, la aplicación iniciará una excepción en tiempo de ejecución. Puede especificar WinNT://nombreDeSuEquipo para la ruta y el proveedor de servicios intentará encontrar el equipo.
Para agregar los nodos de nivel superior al control TreeView
En el diseñador, haga doble clic en el botón Form1 para crear el controlador de eventos Form_Load en el Editor de código.
Modifique el método Form_Load agregando el código necesario para crear los tres nodos de nivel superior para usuarios, grupos y servicios. Cuando la aplicación se ejecuta, la propiedad Children del componente denominado entryPC contiene todas las entradas encontradas en Path (su equipo). Cada objeto secundario es también un objeto DirectoryEntry. Puesto que está utilizando el proveedor de WinNT en una ruta de acceso de equipo, la propiedad SchemaClassName del objeto secundario DirectoryEntry tendrá uno de estos tres valores: "User", "Group" o "Service". Utilice una instrucción Select o switch para agregar un nodo al grupo correcto, en función del tipo de entrada de directorio que indique la propiedad SchemaClassName.
En el siguiente paso, escribirá el método 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 Subprivate 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); } }Agregue el código siguiente a la clase Form1 para crear el método AddPathAndProperties. El parámetro node representa el objeto TreeNode asociado a dicha entrada. El parámetro entry representa una entrada del directorio que será un usuario, un grupo o un servicio.
El componente DirectoryEntry tiene una propiedad Properties que contiene una colección de propiedades indizada por cadenas. El contenido de esta colección depende del esquema del componente DirectoryEntry. La colección Properties cuenta con una propiedad PropertyNames, que es una colección de todos los nombres de las propiedades. Puede recuperar cada propiedad de la colección si la recorre paso a paso. Cada propiedad dispone también de una colección de valores asociados. En este método, sólo se recupera el primer valor de cada propiedad.
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 Subprivate 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)); } }
Para ejecutar el programa
Presione F5 para ejecutar el programa.
Abra los nodos para examinar las rutas de acceso y las propiedades. Los usuarios comparten todos el mismo conjunto de propiedades, ya que comparten el mismo esquema. Lo anterior también es cierto para los nodos de grupos y servicios.
Este tutorial ha utilizado el proveedor de servicios de WinNT para los servicios de dominio de Active Directory. Existen otros servicios disponibles, como LDAP (Lightweight Directory Access Protocol), NDS (Novell NetWare Directory Service) y NWCOMPAT (Novell Netware 3.x Service). Cada proveedor proporciona un conjunto diferente de objetos que permite examinar y manipular directorios.
DirectorySearcher se puede utilizar para buscar entradas de una ruta de acceso raíz. DirectorySearcher funciona con el proveedor LDAP.
Consulte también
Referencia
System.DirectoryServices
DirectoryEntry
DirectorySearcher
Conceptos
Introducción a System.DirectoryServices
Send comments about this topic to Microsoft.
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.