【问题标题】:How do I search for a list of user id's using LDAP and C#?如何使用 LDAP 和 C# 搜索用户 ID 列表?
【发布时间】:2019-10-21 17:29:38
【问题描述】:

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

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

我找到了这个LDAP Filter Syntax page,它表明条件可以嵌套。

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

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

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

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

搜索域名:us

计数:0

搜索域名:加拿大

计数:1

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

【问题讨论】:

  • 你有一个!在您的语法中,而不是 OR (|)

标签: c# active-directory ldap directoryservices directorysearcher


【解决方案1】:

您使用了感叹号 (!),表示“不是”。你想使用管道(|),意思是“或”:

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

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

【讨论】:

  • 是的。我只是想通了...这是一个错字,不是故意的。直到我问这个问题我才看到它。我只是在寻找最多 1 到 100 人的列表。取决于从 sql 查询中收到的内容。此应用通过电子邮件向有要查看警报的人发送电子邮件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多