如何使用 LDAP 和 C# 搜索用户 ID 列表?



我需要搜索给定特定用户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:更好的性能

最新更新