2011-07-16 127 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有什麼限制? –