在.NET中添加和删除Active Directory组中的用户

时间:2010-01-26 22:12:08

标签: c# .net active-directory ldap active-directory-group

我正在编写以下方法来在C#中添加和删除活动目录中的用户。

void AddUserToGroup(string userId, string groupName);
void RemoveUserFromGroup(string userId, string groupName);

如何最好地实施这些方法?

以下是CodeProject的一些代码。我在这些示例中看不到AD服务器的位置? (在使用LDAP协议时,它是由.NET框架隐式提供的吗?)。这些例子值得关注吗?

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();

    }
}


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

    }
}

4 个答案:

答案 0 :(得分:76)

唉。 LDAP。如果您使用的是.Net Framework 3.5或更高版本,我强烈建议您使用System.DirectoryServices.AccountManagement命名空间。这使事情所以更容易。

public void AddUserToGroup(string userId, string groupName) 
{ 
    try 
    { 
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
            group.Members.Add(pc, IdentityType.UserPrincipalName, userId);
            group.Save();
        }
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
        //doSomething with E.Message.ToString(); 

    } 
} 

public void RemoveUserFromGroup(string userId, string groupName)
{   
    try 
    { 
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
            group.Members.Remove(pc, IdentityType.UserPrincipalName, userId);
            group.Save();
        }
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
        //doSomething with E.Message.ToString(); 

    }
}

答案 1 :(得分:3)

服务器是 groupDn 变量值的一部分。例如:

<强> LDAP://myServer/CN=MyGroup,CN=Groups,CN=MyContainer,DN=mydomain.com

整个事情是该组的LDAP路径。第一部分(myServer)是服务器名称。

服务器名称后面的部分(例如CN = ...)是该组的DN(可分辨名称)。

答案 2 :(得分:2)

删除中的成员时 public void RemoveUserFromGroup(string userDn, string groupDn)

dirEntry.Properties["member"].Remove(userDn)对我不起作用。

dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn))有效。

答案 3 :(得分:1)

您可以将LDAP服务器放在DirectoryEntry的path参数中,这样“LDAP://”+ ldapServer + ldapQuery。

如果需要进行身份验证,请使用DirectoryEntry(String path,String userId,String password)