对 getUserGroups 的 LDAP 查询

LDAP Query to getUserGroups

尝试学习 C# 中的 LDAP 查询以访问获取用户在活动目录中分配到的所有组: 我正在使用 System.DirectoryServices:

尚未对其进行测试,但通过将示例放在一起,我得到了:

//This should return all groups for particular user
        public List<string> GetUserGroups(string UserName)
        {
            //create connection
            DirectoryEntry entry = new DirectoryEntry(_lDAPPath);
            DirectorySearcher search = new DirectorySearcher(entry);

            //Get user with UserName
            string query = "(&(objectCategory=User)(objectClass=person)(name=" + UserName + "*))";//(memberOf=*))";
            search.Filter = query;
            //properties returned by query
            search.PropertiesToLoad.Add("memberOf");
            search.PropertiesToLoad.Add("name");

            System.DirectoryServices.SearchResultCollection mySearchResultColl = search.FindAll();

            List<string> userGroups = new List<string>();
            //Should only be one user in foreach loop
            foreach (SearchResult result in mySearchResultColl)
            {
                //for user get each group assigned to
                foreach (string prop in result.Properties["memberOf"])
                {
                    if (prop.Contains(UserName))
                    {
                        //adds group name to string
                        userGroups.Add(result.Properties["memberOf"][0].ToString());
                    }
                }
            }

            return userGroups;
        }

希望这能奏效。有没有人看到任何可能的问题? ta

最好在发布之前测试您的代码并指出您无法处理的任何错误。然而,这是我多年来一直使用的经过测试的代码。它按 cn 搜索,即 Common Name(用户别名)

public static List<string> GetUserGroupDetails(string userName)
        {

            DirectorySearcher search = new DirectorySearcher();
            List<string> groupsList = new List<string>();
            search.Filter = String.Format("(cn={0})", userName);
            search.PropertiesToLoad.Add("memberOf");

            SearchResult result = search.FindOne();
            if (result != null)
            {
                int groupCount = result.Properties["memberOf"].Count;

                for (int counter = 0; counter < groupCount; counter++)
                {
                    string s = (string)result.Properties["memberOf"][counter];
                    groupsList.Add(s);
                    // _log.DebugFormat("found group for user {0} : {1}", userName, s);

                }
            }
            else
            {
                _log.Warn("no groups found for user " + userName);
            }
            return groupsList;
        }

请注意,上面的代码还 returns 用户所属的电子邮件分发列表。当我想排除这些时,我会过滤掉带有 "dl-".

的条目