从2 OU中查找Active Directory用户

时间:2017-03-23 08:59:09

标签: c# .net active-directory

我有一个.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中。

1 个答案:

答案 0 :(得分:1)

(更新:再次阅读)

功能/循环解决方案

(我更喜欢下面带有全局目录的解决方案,因为它的代码更少,更强大。)

由于在不使用全局目录时可能无法使用OR - LDAP搜索字符串,如下所述,您可以重复上述内容(我猜工作)例如,放置两个 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 - 搜索字符串等来做这件事对我来说不起作用,看来,你可能不得不使用全局目录服务(默认端口3268 ,如果您有MS Active Directory,否则我不知道其他目录服务是否具有此功能)。 我想你必须在PrincipalContext上指定这个,这可能会使用其他默认值(389?)。