我一直在编写一些代码来使用 C# 和System.DirectoryServices.AccountManagement
命名空间搜索 Active Directory。
我遇到的问题是PrincipalSearcher
无法进行 OR 查询,所以如果我想通过电子邮件地址搜索用户 OR SamAccountName
,这是不可能的。
为了解决这个问题,它似乎在后台PrincipalSearcher
使用,因此您可以访问并设置它(使用),但由于某种原因,它不会遵循我指定的过滤器。DirectorySearcher
DirectorySearcher
GetUnderlyingSearcher
DirectorySearcher
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "localhost");
UserPrincipal usrPrinc = new UserPrincipal(ctx);
PrincipalSearcher searchPrinc = new PrincipalSearcher { QueryFilter = usrPrinc };
DirectorySearcher searchdirectory = searchPrinc.GetUnderlyingSearcher() as DirectorySearcher;
searchdirectory.Filter = "(&(objectClass=user)(objectcategory=person)(|(name=*admin*)(samaccountname=*admin*)))";
searchdirectory.Sort.PropertyName = "name";
searchdirectory.SizeLimit = 10;
var results = searchPrinc.FindAll();
以上基于SizeLimit
(10) 返回正确数量的结果,并按 正确排序PropertyName
,但它根本不会使用该Filter
选项。
有什么方法可以设置PrincipalSearcher
使用 OR 过滤器(无需查询所有用户和过滤客户端)或让它正确使用该Filter
选项?
我有一种工作方法DirectoryEntry
,DirectorySearcher
但正在寻找 aUserPrincipal
提供的简单性和方法。