2014-01-06 75 views
2

我正在编写以下方法将活动目录中的用户添加到C#中的自定义组。 我有一个名为“SHO用户”的OU和一个名为“SHO Sharepoint用户”的子012 我的所有用户都保存在子ou下。 我确实在名为“Test GRP”的第一个“SHO Users”下有一个组。 我需要用下面的代码添加一些用户到“测试GRP”组,但没有运气。 我会很感激任何帮助。 感谢C#将LDAP用户添加到组

public void AddToGroup(string userDn, string groupDn) 
{ 
    try 
    { 
     DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn); 
     dirEntry.Properties["member"].Add(userDn); 
     dirEntry.CommitChanges(); 
     dirEntry.Close(); 
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
     //doSomething with E.Message.ToString(); 

    } 
} 

protected void btnAdd_Click(object sender, EventArgs e) 
{ 
string UserId = txtFirstname.Text + " " + txtLastname.Text; 
AddToGroup("CN=" + UserId + ",OU=SHO Sharepoint User,OU=SHO Users,dc=test,dc=com", "CN=Test GRP,CN=Groups,DC=test,DC=com"); 
} 
+1

如果您使用的是.NET 3.5,则应该使用System.DirectoryServices.AccountManagement命名空间(http://msdn.microsoft.com/zh-cn/library/system.directoryservices.accountmanagement(v = vs.90)的.aspx)。 – Kevin

+0

不幸的是,我不在.Net 3.5上,我想我没有别的选择只是使用directoryentry函数 – Armin

+0

运行这个帐户的帐户是否有权将成员添加到组中?据我所知,与DirectoryEntries合作对此非常敏感。您需要确保应用程序池标识具有此域权限,否则您需要将呼叫包装在做出 – Kevin

回答

1

试试这个功能:

public void AddToGroup(string userDn, string groupDn) 
{ 
    try 
    { 
     DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn); 
     dirEntry.Invoke("Add", new object[] { userDn }); 
     dirEntry.CommitChanges(); 
     dirEntry.Close(); 
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
     //doSomething with E.Message.ToString(); 

    } 
} 

要检查连接字符串是正确的,你可以使用该工具AdExplorer。只需选择您感兴趣的对象,并从顶部栏复制地址。

+0

仍然无法使用。你可以看看我的LDAP字符串。我可能做错了什么。 – Armin

+0

如果运行应用程序的机器不在域中,则需要在连接字符串中添加LDAP服务器:'LDAP:// server/...' – alu

+0

我的web服务器已加入到域中,我有以下在我的web.config上: Armin