Estoy tratando de obtener una lista de usuarios y algunas propiedades sobre el usuario dentro de un grupo de directorio activo.Lista de usuarios en el grupo de distribución de Active Directory específico
Actualización:
Éstos son los dos métodos que tengo actualmente:
Dim adGroup As New DirectoryEntry("LDAP://CN=MyGroup,OU=Groups,OU=Accounts,OU=All,DC=domain,DC=com")
Dim adMembers As Object
Dim objUser As ActiveDirectoryUser
Dim objUserList As New List(Of ActiveDirectoryUser)
Dim directoryEntry As DirectoryEntry
adMembers = adGroup.Invoke("Members", Nothing)
For Each adMember As Object In CType(adMembers, IEnumerable)
directoryEntry = New DirectoryEntry(adMember)
objUser = New ActiveDirectoryUser
objUser.UserId = directoryEntry.Properties.Item("sAMAccountName").Value.ToString()
objUser.Contract = directoryEntry.Properties.Item("ou").Value.ToString()
objUser.LastName = directoryEntry.Properties.Item("sn").Value.ToString()
objUser.FirstName = directoryEntry.Properties.Item("givenName").Value.ToString()
objUser.Email = directoryEntry.Properties.Item("mail").Value.ToString()
objUserList.Add(objUser)
Next
La primera pieza funciona, aunque parece bastante ineficiente. Mi uso de memoria sube y sube a medida que se ejecuta y recibí el error this, aunque parece que se puede arreglar. El segundo método:
Dim results As SearchResultCollection
Dim directoryEntry2 As New DirectoryEntry("LDAP://DC=domain,DC=com")
Dim directorySearcher As New DirectorySearcher(directoryEntry2)
directorySearcher.PageSize = 1000
directorySearcher.Filter = "(&(objectCategory=person)" & _
"(objectClass=user)" & _
"(memberOf=CN=MyGroup,OU=Groups,OU=Accounts,OU=All,DC=domain,DC=com))"
directorySearcher.PropertiesToLoad.Add("ou")
directorySearcher.PropertiesToLoad.Add("sn")
directorySearcher.PropertiesToLoad.Add("givenName")
directorySearcher.PropertiesToLoad.Add("sAMAccountName")
directorySearcher.PropertiesToLoad.Add("mail")
results = directorySearcher.FindAll
El recuento de resultados parece variar de cada ejecución de la aplicación que me parece impar. No estoy seguro de si esta es una forma confiable de recuperar a los usuarios o si necesito modificar algo en mi búsqueda.
Looping a través de las propiedades de los miembros me acercó. De todas formas, necesitaré extraer propiedades del objeto miembro (nombre, correo electrónico, etc.). Supongo que tendré que convertir el groupmemberDN en su ejemplo a un tipo de objeto específico para que pueda extraer propiedades de él. –
Gracias por su ayuda hasta ahora. Tengo dos preguntas. En primer lugar, usted había dicho que no podía obtener los miembros mediante el uso de un buscador de directorios, por lo que en su ejemplo actualizado veo que puedo, así que esperaba que pudiera dar más detalles sobre lo que quería decir allí. En segundo lugar, puedo obtener un resultado utilizando el buscador del directorio, pero el conteo de la colección parece variar cada vez que ejecuto mi aplicación, cuando debería ser consistente (actualmente no se está agregando a nadie al grupo). –
@ Ek0nomik: ** no puedes ** enumerar un grupo para encontrar todos sus miembros, ya que un grupo es ** no ** un contenedor en AD sobre el que puedes enumerar. No contiene sus miembros como objetos secundarios. Sin embargo, puede enumerar una rama de directorio y encontrar todos los usuarios que son miembros de un grupo específico. –