我正在尝试从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;
}
感谢您的帮助!
答案 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