我需要搜索给定特定用户ID列表的用户。如果我使用此过滤器搜索单个用户,它工作正常:
using (DirectorySearcher ds = new DirectorySearcher(de) { Filter = $"(&(sAMAccountType=805306368)(sAMAccountName=xyz123))" })
{
SearchResult sr = ds.FindOne();
}
我找到了这个LDAP过滤器语法页面,它显示条件可以嵌套。
(|(cn=Jim Smith((&(givenName=Jim((sn=Smith(((
条件可以用括号嵌套,但请确保 括号匹配。
所以我尝试使用此过滤器和 FindAll((,虽然我希望看到 1 代表我们,1 代表加拿大,但它只在加拿大找到了那个。
(&(sAMAccountType=805306368((!(sAMAccountName=xyz123((sAMAccountName=abc456
(((搜索域名: 我们
计数: 0
搜索域名: 加拿大
计数: 1
所以也许我对过滤器语法的理解不够好。另外,是否可以通过一次调用搜索所有域?
您使用的是感叹号 (!
(,意思是"不是"。你想使用管道 (|
(,意思是"或":
(&(sAMAccountType=805306368)(|(sAMAccountName=xyz123)(sAMAccountName=abc456)))
如果你有一个你正在寻找的用户名列表(我说的是数百个(,你可能会考虑将它们分成单独的搜索。我实际上在我写的一篇文章中介绍了这一点(使用示例代码(:Active Directory:更好的性能