Agregar y eliminar usuarios de grupos de Active Directory en .NET

Estoy escribiendo los siguientes métodos para agregar y eliminar usuarios del directorio activo en C #.

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

¿Cuál es la mejor manera de implementar estos métodos?

Aquí hay un código de CodeProject. Sin embargo, no puedo ver dónde se especifica el servidor AD en estos ejemplos. (¿Es provisto implícitamente por .NET Framework cuando se usa el protocolo LDAP?). ¿Vale la pena seguir estos ejemplos?

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

Ugh. LDAP. Si está utilizando .Net Framework 3.5 o superior, le recomiendo usar el espacio de nombres System.DirectoryServices.AccountManagement. Eso hace las cosas mucho más fáciles.

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

Al eliminar un miembro en public void RemoveUserFromGroup(string userDn, string groupDn)

dirEntry.Properties["member"].Remove(userDn) no funciona para mí.

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

El servidor es parte del valor de la variable groupDn . Por ejemplo:

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

Todo es la ruta LDAP para el grupo. La primera parte (myServer) es el nombre del servidor.

La parte posterior al nombre del servidor (p. Ej. CN = …) es el DN (nombre completo) del grupo.

Puede poner el servidor LDAP en el argumento de ruta a DirectoryEntry, por lo que “LDAP: //” + ldapServer + ldapQuery.

Utilice DirectoryEntry (String path, String userId, String password) si necesita autenticarse