将用户添加到AD安全组

时间:2015-02-12 20:23:46

标签: c# dns active-directory directorysearcher

我有一个非常简单的任务 - 给定用户名及其电子邮件的列表(来自文件),将其与AD(Active Directory)用户的成员同步,这意味着 - 添加列表中存在且AD中缺少的用户组,并删除AD组中存在且列表中缺少的用户。复杂的是,该公司非常庞大,并根据其位置在全球范围内使用了很多域名 - 比方说it.comany.comfr.company.comuk.company.comus.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(PrincipalContextGroupPrincipal.FindByIdentity)中引入的新AD管理功能,因为它们不允许为搜索指定根(这是{{{{ 1}}构造函数),我需要它,因为AD组位于DirectorySearcher域而不是company.com我的帐户所在地。

0 个答案:

没有答案