Active Directory搜索 - 按Manager过滤

时间:2011-01-28 10:39:50

标签: c# active-directory filter ldap

我正在尝试从Active Directory获取具有指定管理器的用户列表。 我使用了以下LDAP过滤器但没有成功:

(manager=CN=Misterboss_n*)

然而,它没有返回任何结果。用户在manager属性中具有以下值:

"CN=Misterboss_n,OU=xyz user,DC=xyz,DC=local"

我做错了什么?如果我用这样的东西替换上面的过滤器:

(givenName=John*)

它可以正常运行(返回给定名称为John的所有用户)。

更广泛的背景:

public List<ADUserDetail> GetAllEmployeesUnderMisterboss()
        {
            List<ADUserDetail> userlist = new List<ADUserDetail>();
            string filter = "";
            _directoryEntry = null;
            DirectorySearcher directorySearch = new DirectorySearcher(SearchRoot);
            directorySearch.Asynchronous = true;
            directorySearch.CacheResults = true;
            filter = "(manager=CN=Misterboss_n*)";
            directorySearch.Filter = filter;
            SearchResultCollection userCollection = directorySearch.FindAll();
            foreach (SearchResult users in userCollection)
            {
                DirectoryEntry userEntry = new DirectoryEntry(users.Path, LDAPUser, LDAPPassword);
                ADUserDetail userInfo = ADUserDetail.GetUser(userEntry);
                userlist.Add(userInfo);
            }
            return userlist;
        }

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我认为DN类型的属性没有可用的字段搜索。您必须使用经理的完整DN。如果您不知道完整DN,请先找到经理的LDAP对象并使用其distinguishedName属性。

在构建过滤器之前一定要escape the DN value properly - 并非DN中有效的每个字符在LDAP过滤器表达式中都有效:

*   as  \2a
(   as  \28
)   as  \29
\   as  \5c
NUL as  \00
/   as  \2f

对于代码示例,请参阅此相关主题,我回答了一个非常相似的问题:Getting all direct Reports from Active Directory