我有一個C#4.0程序工作,檢索特定AD組的所有成員。在這個AD組中是包含其他成員的其他AD組。我需要我的程序來識別它是一個組,並檢索該組中的成員。活動目錄嵌套組
我知道我需要寫一個遞歸程序,但我希望有人可能已經做到了。如果不是的話,有人可以告訴我AD屬性來確定該成員是否屬於一個實際的組?
我有一個C#4.0程序工作,檢索特定AD組的所有成員。在這個AD組中是包含其他成員的其他AD組。我需要我的程序來識別它是一個組,並檢索該組中的成員。活動目錄嵌套組
我知道我需要寫一個遞歸程序,但我希望有人可能已經做到了。如果不是的話,有人可以告訴我AD屬性來確定該成員是否屬於一個實際的組?
假設您在ActiveDirectory中使用LDAP視圖,您要查找的屬性稱爲「objectClass」。我相信一個組會出現一個「groupOfNames」對象類;可能是「組」。或者,只要查看對象是否具有任何「成員」,而不考慮對象類,並且如果它確實如此,則假定它是某種組和遞歸的。
由於您使用的是.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使得它可以很容易在公元玩弄用戶和組!
感謝您閱讀S.DS.AM上的提示。它爲我節省了編寫遞歸程序的痛苦! –
'GetMembers(true)'有一個限制,例如'域用戶'完全沒有返回。爲了得到它們,你必須遞歸地調用'GetMembers(false)'。 –
@WernfriedDomscheit有什麼限制? –
此鏈接可能很有用:http://en.csharp-online.net/User_Management_with_Active_Directory%E2%80%94Retrieving_tokenGroups_from_ADAM –