2011-07-16 111 views
9

我有一个C#4.0程序工作,检索特定AD组的所有成员。在这个AD组中是包含其他成员的其他AD组。我需要我的程序来识别它是一个组,并检索该组中的成员。活动目录嵌套组

我知道我需要写一个递归程序,但我希望有人可能已经做到了。如果不是的话,有人可以告诉我AD属性来确定该成员是否属于一个实际的组?

+0

此链接可能很有用:http://en.csharp-online.net/User_Management_with_Active_Directory%E2%80%94Retrieving_tokenGroups_from_ADAM –

回答

-1

假设您在ActiveDirectory中使用LDAP视图,您要查找的属性称为“objectClass”。我相信一个组会出现一个“groupOfNames”对象类;可能是“组”。或者,只要查看对象是否具有任何“成员”,而不考虑对象类,并且如果它确实如此,则假定它是某种组和递归的。

13

由于您使用的是.NET 3.5及更高版本,因此您应该查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。阅读所有关于它在这里:

基本上,你可以定义域范围内,并可以轻松地查找用户和/或组AD。另外:GroupPrincipal有一个名为GetMembers的方法,它将列出该组的所有成员 - 可选地,它将为您递归地执行此操作!

// set up domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find the group you're interested in 
GroupPrincipal myGroup = GroupPrincipal.FindByIdentity(ctx, "SomeGroup"); 

// if you found it - get its members 
if (myGroup != null) 
{ 
    // if your call the GetMembers, you can optionally specify a "Recursive" flag - done here 
    var allMembers = myGroup.GetMembers(true); 
} 

新S.DS.AM使得它可以很容易在公元玩弄用户和组!

+0

感谢您阅读S.DS.AM上的提示。它为我节省了编写递归程序的痛苦! –

+0

'GetMembers(true)'有一个限制,例如'域用户'完全没有返回。为了得到它们,你必须递归地调用'GetMembers(false)'。 –

+0

@WernfriedDomscheit有什么限制? –