【问题标题】:Finding Active Directory users from 2 OU从 2 个 OU 中查找 Active Directory 用户
【发布时间】:2017-08-15 17:28:34
【问题描述】:

我有一个 .Net 应用程序,它从特定 OU (ABCUsers) 中的活动目录中读取用户。以下是代码:

string DomainIP = "some domain IP";
string ContainerConnectionString = "OU=ABCUsers,DC=test,DC=com";
PrincipalContext domain = new PrincipalContext(ContextType.Domain, DomainIP, ContainerConnectionString, ContextOptions.SimpleBind);

PrincipalSearcher searcher = new PrincipalSearcher();
UserPrincipal findUser = new UserPrincipal(domain);
findUser.SamAccountName = "some username";
searcher.QueryFilter = findUser;
UserPrincipal foundUser = (UserPrincipal)searcher.FindOne();

上面的代码工作正常,但我需要更改代码,以便它检索用户,无论他/她是在 OU=ABCUsers 还是 OU=XYZUsers 但不在任何其他 OU 中。

【问题讨论】:

  • 下面添加了循环/函数解决方案

标签: c# .net active-directory


【解决方案1】:

(更新:再次阅读)

函数/循环解决方案

(不过我更喜欢下面的全局目录的解决方案,因为它的代码更少,更健壮。)

由于在不使用 全局目录 时它可能无法与 OR-LDAP-search 字符串一起使用,如下所述,您可以重复上述(我猜是可行的)代码对于与此类似的两个 OU 放置例如在单独的函数中(伪代码):

UserPrincipal findUserInOu( String ou ) {
   string DomainIP = "some domain IP";
   string ContainerConnectionString = "OU=" + ou + ",DC=test,DC=com";
   // ... above code continued
}

UserPrincipal foundUser = findUserInOu("ABCUsers");
if ( foundUser == null )
  foundUser = findUserInOu("XYZUsers");

GlobalCatalog 解决方案

正如我所说的 here,使用一些 OR-search 字符串等对我不起作用,看来您可能必须使用 Global Catalog 服务(在默认的port 3268,如果你有MS Active Directory,否则我不知道其他目录服务是否会有这个功能)。 我猜你必须在PrincipalContext 上指定这个,它可能会使用其他一些默认值(389?)。

【讨论】:

  • 感谢您的帮助。我会将其视为答案,因为它可能对某人有所帮助,但我正在寻找的是无需循环/重复即可做到这一点。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多