0

我需要搜索给定特定用户 ID 列表的用户。如果我使用此过滤器搜索单个用户,它工作正常:

 using (DirectorySearcher ds = new DirectorySearcher(de) { Filter = $"(&(sAMAccountType=805306368)(sAMAccountName=xyz123))" })
 {
    SearchResult sr = ds.FindOne();
 }

我找到了这个LDAP Filter Syntax 页面,它显示条件可以嵌套。

(|(cn=Jim Smith)(&(givenName=Jim)(sn=Smith)))

条件可以用括号嵌套,但要确保括号匹配。

所以我尝试使用这个过滤器和 FindAll(),虽然我希望我们看到 1,加拿大看到 1,但它只在加拿大找到了一个。

(&(sAMAccountType=805306368)(!(sAMAccountName=xyz123)(sAMAccountName=abc456)))

查询域名:us

计数:0

查询域名:加拿大

计数:1

所以也许我对过滤器语法的理解不够好。另外,是否可以一次调用搜索所有域?

4

1 回答 1

3

您正在使用感叹号 ( !),表示“不是”。您想使用管道 ( |),表示“或”:

(&(sAMAccountType=805306368)(|(sAMAccountName=xyz123)(sAMAccountName=abc456)))

如果您有大量要查找的用户名(我说的是数百个),您可能会考虑将它们分成单独的搜索。我实际上在我写的一篇文章中介绍了这个(带有示例代码):Active Directory:更好的性能

于 2019-10-21T17:36:46.550 回答