Имам Active Directory с домейн myDomain.local
, под него съществува Distribution Group
, който съдържа много групи.
Как мога да прочета (програмно) всички тези подгрупи, за да извлека списък с имената им?
И как да оптимизирам заявката, за да филтрира резултата, така че да извлича само всички групи, които завършват с думата Region
?
Между другото, използвам C#.Net, ASP.Net и sharepoint, и аз нямам опит с AD.
Четене/филтриране на подгрупите на групата за разпространение на активна директория?
Отговори (2)
Ако сте на .NET 3.5 (или можете да надстроите до него), можете да използвате този код, като използвате пространството от имена 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);
}
}
Това задоволява ли вашите нужди?
За повече информация относно пространството от имена System.DirectoryServices.AccountManagement
, прочетете Управление на принципи за сигурност на директорията в .NET Статия за Framework 3.5 в списание MSDN.
person
marc_s
schedule
01.07.2010
Благодаря, Марк, все още не съм пробвал кода ви, но все пак ще публикувам решението, което направих, за тези, които се интересуват от темата. Много благодаря.
- person Ashraf Bashir; 02.07.2010
Ето решението, което направих; за интересуващите се:
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;
}
person
Ashraf Bashir
schedule
03.07.2010