我有一些代码使用DirectoryEntry
通过LDAP操作本地Active Directory。目前我找到一个特定的OU
,向其添加用户,更新用户的属性,然后提交所有更改:
DirectoryEntry ldapRoot = new DirectoryEntry(ldapString, user, password);
DirectoryEntry userGroup = ldapRoot.Children.Find("OU=OUGroup");
DirectoryEntry newUser = userGroup.Children.Add("CN=" + userName, "user");
newUser.Properties["displayName"].Value = displayName;
...
newUser.CommitChanges();
userGroup.Close();
ldapRoot.Close();
ldapString类似于LDAP:\\DC=company,DC=local
,基本上它只是获取根条目。
我更改了几个属性,但一切正常。但是,我有另一个名为SharePoint_Groups的OU
,其中有一个名为Internal
的组。我想将新用户添加为该组的成员,但我不知道该怎么做。我尝试了以下方法:
DirectoryEntry spGroup = ldapRoot.Children.Find("OU=Sharepoint_Groups");
DirectoryEntry internal = spGroup.Children.Find("CN=Internal");
它不起作用,我不确定如何解决Internal
- CN =正确还是我应该使用其他规范?
而且,一旦我拥有了正确的组,如何将现有用户添加到其中?
提前致谢
答案 0 :(得分:3)
基本上,要将用户添加到现有组,您需要使用用户的完全限定专有名称绑定到该组并更新其member
属性:
DirectoryEntry deGroup = new DirectoryEntry("LDAP://CN=Internal,OU=Sharepoint_Groups,DC=Company,DC=local");
string userDN = newUser.Properties["distinguishedName"][0].ToString();
deGroup.Properties["member"].Add(userDN);
deGroup.CommitChanges();
像这样的东西的一个很好的资源是CodeProject文章How to do just about everything in Active Directory using C# - 许多有用的代码示例!