问题描述
我检查了这个已经发帖了.但它没有回答我的问题.我想获取特定用户所属的所有 Active Directory 组.
I checked this post already. But it doesn't answer my question. I want to get all the active directory groups in which a particular user is a member.
我编写了以下代码.但我无法继续,因为我不知道如何提供过滤器以及如何访问属性.
I've written the following code. But I'm not able to proceed further as I don't know how to give the filter and how to access the properties.
class Program { static void Main(string[] args) { DirectoryEntry de = new DirectoryEntry("LDAP://mydomain.com"); DirectorySearcher searcher = new DirectorySearcher(de); searcher.Filter = "(&(ObjectClass=group))"; searcher.PropertiesToLoad.Add("distinguishedName"); searcher.PropertiesToLoad.Add("sAMAccountName"); searcher.PropertiesToLoad.Add("name"); searcher.PropertiesToLoad.Add("objectSid"); SearchResultCollection results = searcher.FindAll(); int i = 1; foreach (SearchResult res in results) { Console.WriteLine("Result" + Convert.ToString(i++)); DisplayProperties("distinguishedName", res); DisplayProperties("sAMAccouontName", res); DisplayProperties("name", res); DisplayProperties("objectSid", res); Console.WriteLine(); } Console.ReadKey(); } private static void DisplayProperties(string property, SearchResult res) { Console.WriteLine(" " + property); ResultPropertyValueCollection col = res.Properties[property]; foreach (object o in col) { Console.WriteLine(" " + o.ToString()); } } }
有什么想法吗?
推荐答案
只需查询memberOf"属性并迭代返回,例如:
Just query the "memberOf" property and iterate though the return, example:
search.PropertiesToLoad.Add("memberOf"); StringBuilder groupNames = new StringBuilder(); //stuff them in | delimited SearchResult result = search.FindOne(); int propertyCount = result.Properties["memberOf"].Count; String dn; int equalsIndex, commaIndex; for (int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++) { dn = (String)result.Properties["memberOf"][propertyCounter]; equalsIndex = dn.IndexOf("=", 1); commaIndex = dn.IndexOf(",", 1); if (-1 == equalsIndex) { return null; } groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); groupNames.Append("|"); } return groupNames.ToString();
这只是将组名填充到 groupNames 字符串中,以管道分隔,但是当你旋转时,你可以对它们做任何你想做的事情
This just stuffs the group names into the groupNames string, pipe delimited, but when you spin through you can do whatever you want with them