我有一个.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中。
答案 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");
正如我所说here,用一些OR
- 搜索字符串等来做这件事对我来说不起作用,看来,你可能不得不使用全局目录服务(默认端口3268 ,如果您有MS Active Directory
,否则我不知道其他目录服务是否具有此功能)。
我想你必须在PrincipalContext
上指定这个,这可能会使用其他默认值(389?)。