我有一个非常简单的任务 - 给定用户名及其电子邮件的列表(来自文件),将其与AD(Active Directory)用户的成员同步,这意味着 - 添加列表中存在且AD中缺少的用户组,并删除AD组中存在且列表中缺少的用户。复杂的是,该公司非常庞大,并根据其位置在全球范围内使用了很多域名 - 比方说it.comany.com
,fr.company.com
,uk.company.com
,us.company.com
等 - - 每个用户都包含大量用户,用户可以添加任何用户。
我使用以下代码查找AD组:
var groupSearch = new DirectorySearcher(new DirectoryEntry(“LDAP://company.com”), “(&(ObjectClass=Group)(CN=TheNameOfTheADGroup))”);
var dirEntry = new DirectoryEntry(groupSearch.FindOne().Path);
并成功找到该组。
现在,我需要将用户添加到此群组(仅知道他的用户名,例如willsmith
)。这可以通过调用
dirEntry.Invoke(“Add”, new object[] { dirPath })
其中dirPath
是用户的完整LDAP路径。我可以通过在特定领域搜索来获得它,例如:
var userSearch = new DirectorySearcher(new DirectoryEntry(“LDAP://xx.company.com”), “(&(ObjectClass=User)(CN=willsmith))”);
var dirPath = userSearch.FindOne().Path;
//and then use dirPath in Invoke(“Add”…) – see above
但问题是我不知道用户所在的域名是什么,域名数量大约为30,每个用户搜索大约需要2-3秒,因此这将是一个非常漫长的过程。 / p>
如何为用户定义域名?或者可能是其他解决问题的方法?
P.S。我不使用.NET 3.5(PrincipalContext
,GroupPrincipal.FindByIdentity
)中引入的新AD管理功能,因为它们不允许为搜索指定根(这是{{{{ 1}}构造函数),我需要它,因为AD组位于DirectorySearcher
域而不是company.com
我的帐户所在地。