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