c# - usuario - Consulta de Ldap para todos los miembros específicos de un grupo
query active directory c# (2)
Estoy buscando obtener una lista de usuarios que pertenecen a un grupo específico ''groupName'' que se pasa al método privado.
DirectoryEntry de = new DirectoryEntry("LDAP://DC=xxxx,DC=net"); // Root Directory //
var ds = new DirectorySearcher(de);
ds.PropertiesToLoad.Add("SAMAccountName");
ds.PropertiesToLoad.Add("member");
ds.Filter = "(&(objectClass=group)(SAMAccountName=" + groupName + "))";
SearchResultCollection AllGroupUsers;
AllGroupUsers = ds.FindAll();
La consulta devuelve 3 propiedades: - adspath, accountName y miembro. El miembro es lo que realmente busco. Accedo a la propiedad del miembro y sus valores como lo demuestra el siguiente fragmento de código:
if (AllGroupUsers.Count > 0)
{
ResultPropertyValueCollection values = AllGroupUsers[0].Properties["member"];
pero algo extraño sucede aquí. En el RHS del signo igual, AllGroupUsers tiene un valor para un miembro específico como "CN = Mike Schoomaker R, ........"
Mientras está en el LHS del signo igual, values tiene "CN = Mike Schoomaker (OR), ....."
No estoy muy seguro de cómo esto es posible ... No ocurre con todos y cada uno de los valores en AllGroupUsers ... lo único que sé es que sucede para los usuarios externos en el directorio activo ... ¿Alguien puede mostrarme cómo puede arreglar esto y obtener el nombre real, apellido e inicial inicial?
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
using (var group = GroupPrincipal.FindByIdentity(ctx, "groupName"))
{
if (group == null)
{
MessageBox.Show("Group does not exist");
}
else
{
var users = group.GetMembers(true);
foreach (UserPrincipal user in users)
{
//user variable has the details about the user
}
}
}
}
Para obtener un usuario, no un grupo, debe establecer el objeto DirectoryEntry y usar las propiedades correspondientes ( displayName
ej., givenName
, sn
, givenName
, initials
)
Ejemplo:
...
AllGroupUsers = ds.FindAll();
if (AllGroupUsers.Count > 0) {
ResultPropertyValueCollection values = AllGroupUsers[0].Properties["member"];
foreach (string s in values)
{
DirectoryEntry u = new DirectoryEntry("LDAP://" + s);
Console.WriteLine(u.Properties["displayName"].Value);
}
}