c# - principiantes - ldap directorio activo
Lectura/filtrado de los subgrupos del grupo de distribuciĆ³n de un directorio activo? (2)
Tengo un Directorio Activo con dominio myDomain.local
, debajo de él existe un Distribution Group
que contiene muchos grupos.
¿Cómo puedo leer (programáticamente) todos estos subgrupos para recuperar una lista de sus nombres?
¿Y cómo optimizar la consulta para filtrar el resultado de modo que solo recupere todos los grupos que terminan con la palabra Region
?
Por cierto, estoy usando C # .Net, ASP.Net y sharepoint, y no tengo experiencia con AD.
Si está utilizando .NET 3.5 (o puede actualizarlo), puede usar este código utilizando el espacio de nombres System.DirectoryServices.AccountManagement
:
// create the "context" in which to operate - your domain here,
// as the old-style NetBIOS domain, and the container where to operate in
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN", "cn=Distribution Group,dc=YourDomain,dc=local");
// define a "prototype" - an example of what you''re searching for
// Here: just a simple GroupPrincipal - you want all groups
GroupPrincipal prototype = new GroupPrincipal(ctx);
// define a PrincipalSearcher to find those principals that match your prototype
PrincipalSearcher searcher = new PrincipalSearcher(prototype);
// define a list of strings to hold the group names
List<string> groupNames = new List<string>();
// iterate over the result of the .FindAll() call
foreach(var gp in searcher.FindAll())
{
// cast result to GroupPrincipal
GroupPrincipal group = gp as GroupPrincipal;
// if everything - grab the group''s name and put it into the list
if(group != null)
{
groupNames.Add(group.Name);
}
}
¿Eso satisface tus necesidades?
Para obtener más información sobre el espacio de nombres System.DirectoryServices.AccountManagement
, lea la publicación Managing Directory Security Principals en el artículo de .NET Framework 3.5 en la revista MSDN.
Esta es la solución que hice; Para aquellos que estén interesados:
public ArrayList getGroups()
{
// ACTIVE DIRECTORY AUTHENTICATION DATA
string ADDomain = "myDomain.local";
string ADBranchsOU = "Distribution Group";
string ADUser = "Admin";
string ADPassword = "password";
// CREATE ACTIVE DIRECTORY ENTRY
DirectoryEntry ADRoot
= new DirectoryEntry("LDAP://OU=" + ADBranchsOU
+ "," + getADDomainDCs(ADDomain),
ADUser,
ADPassword);
// CREATE ACTIVE DIRECTORY SEARCHER
DirectorySearcher searcher = new DirectorySearcher(ADRoot);
searcher.Filter = "(&(objectClass=group)(cn=* Region))";
SearchResultCollection searchResults = searcher.FindAll();
// ADDING ACTIVE DIRECTORY GROUPS TO LIST
ArrayList list = new ArrayList();
foreach (SearchResult result in searchResults)
{
string groupName = result.GetDirectoryEntry().Name.Trim().Substring(3);
list.Add(groupName);
}
return list;
}
public string getADDomainDCs(string ADDomain)
{
return (!String.IsNullOrEmpty(ADDomain))
? "DC=" + ADDomain.Replace(".", ",DC=")
: ADDomain;
}