从2 OU中查找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中。

(更新:再次阅读)

function/循环解决方案

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

由于在不使用全局目录时可能无法使用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解决方案

正如我在这里所说的,用一些OR -search字符串等来做这件事并不适合我,看来,你可能不得不使用全局编目服务(在默认端口3268 ,如果你有一个MS Active Directory否则我不知道其他目录服务是否具有此function)。 我猜你必须在PrincipalContext上指定这个,它可能会使用其他一些默认值(389?)。