2014-01-06 73 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