我有一个包含两个域 AA.RR.COM 和 BB.RR.COM 的 Active Directory 林,其中包含用户和组。 我需要搜索两个域中的用户,同时查询其中一个域(例如 AA.RT.COM) 如何告诉 AD 对林中的所有邻居域运行 LDAP 查询?
这是我的代码:
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);
}
}
那么,有几件事:
(objectClass=person)
替换为 (objectCategory=person)(objectClass=user)