Active directory Active Directory跨域搜索
我有一个包含两个域的目录林,AA.RR.COM和BB.RR.COM,其中包含用户和组。 我需要搜索两个域中的用户,同时查询其中一个域,例如AA.RT.COM 如何让AD对林中的所有相邻域运行LDAP查询 这是我的密码:Active directory Active Directory跨域搜索,active-directory,ldap,cross-domain,Active Directory,Ldap,Cross Domain,我有一个包含两个域的目录林,AA.RR.COM和BB.RR.COM,其中包含用户和组。 我需要搜索两个域中的用户,同时查询其中一个域,例如AA.RT.COM 如何让AD对林中的所有相邻域运行LDAP查询 这是我的密码: using (var searcher = new DirectorySearcher(new DirectoryEntry(adServerName, adLogin, adPassword))) { var filter = string.Format("(&
using (var searcher = new DirectorySearcher(new DirectoryEntry(adServerName, adLogin, adPassword)))
{
var filter = string.Format("(&(objectClass=person)(|(givenName=*{0}*)(displayName=*{0}*)(sn=*{0}*)(mail=*{0}*)))", valueToSearch);
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.PropertiesToLoad.AddRange(new[] {
"samaccountName",
"memberOf",
"displayname",
"mail" });
searcher.Sort = new SortOption("samaccountname", SortDirection.Ascending);
}
当所有用户都在同一个域中时,这种方法可以很好地工作,但当他们分布在同一个林中的多个域中时就不行了
任何帮助都是值得的。既然您说AA.RR.COM和BB.RR.COM在同一个Active Directory林中,您可以检查您的林中是否正在运行全局编录。如果正在运行全局编录,则可以对全局编录运行LDAP查询。下面是假设AA.RR.COM中有一个全局目录的示例代码
using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry("GC://AA.RR.COM")))
{
var filter = string.Format("(&(objectClass=person)(|(givenName=*{0}*)(displayName=*{0}*)(sn=*{0}*)(mail=*{0}*)))", valueToSearch);
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.PropertiesToLoad.AddRange(new[] { "samaccountName", "memberOf", "displayname", "mail" });
searcher.Sort = new SortOption("samaccountname", SortDirection.Ascending);
foreach (SearchResult result in searcher.FindAll())
{
Console.WriteLine(result.Path);
}
}
因此,有几件事:
- 你需要对照一个全球目录。您可以在Harvey的便笺中看到样本装订
- 您需要将
替换为(objectClass=person)
(objectCategory=person)(objectClass=user)
- 你的搜索过滤器效率太低了。默认情况下,您列出的属性中没有一个具有以半高效方式执行中间搜索所需的索引类型。至少,您应该至少更换
- 根据你正在做的事情,你应该看看ANR搜索是否是你真正想要的-
- 进行服务器端排序可能代价高昂,并且可能会失败,结果集很大。您可能希望在本地执行此操作
- 您应该在搜索器中添加页面大小