wake-up-neo.com

Hinzufügen und Entfernen von Benutzern zu Active Directory-Gruppen in .NET

Ich schreibe die folgenden Methoden zum Hinzufügen und Entfernen von Benutzern aus Active Directory in C #.

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

Wie lassen sich diese Methoden am besten implementieren?

Hier ist ein Code von CodeProject. Ich kann jedoch nicht sehen, wo der AD-Server in diesen Beispielen angegeben ist. (Wird es bei Verwendung des LDAP-Protokolls implizit vom .NET-Framework bereitgestellt?) Lohnt es sich, diesen Beispielen zu folgen?

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

    }
}
40
Ben

Pfui. LDAP. Wenn Sie .Net Framework 3.5 oder höher verwenden, empfehle ich dringend, den Namespace System.DirectoryServices.AccountManagement zu verwenden. Das macht die Dinge so viel einfacher.

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

    }
}
78
Jacob Proffitt

Der Server ist Teil des Variablenwerts groupDn. Beispielsweise:

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

Das Ganze ist der LDAP-Pfad für die Gruppe. Der erste Teil (myServer) ist der Servername.

Der Teil nach dem Servernamen (z. B. CN = ...) ist der DN (Distinguished Name) der Gruppe.

3
Mike Marshall

Beim Löschen eines Mitglieds in public void RemoveUserFromGroup(string userDn, string groupDn)

dirEntry.Properties["member"].Remove(userDn) funktioniert bei mir nicht.

dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn)) funktioniert.

2
Andy

Sie können den LDAP-Server in das Pfadargument von DirectoryEntry einfügen, also "LDAP: //" + ldapServer + ldapQuery.

Verwenden Sie DirectoryEntry (String path, String userId, String password), wenn Sie sich authentifizieren müssen

1
Mason