2010-11-04 27 views
2

J'ai du code qui utilise DirectoryEntry pour manipuler l'Active Directory local via LDAP. À l'heure actuelle, je trouve un OU spécifique, ajoutez un utilisateur à elle, mettre à jour les propriétés de l'utilisateur, puis valider toutes les modifications:LDAP: comment ajouter un nouvel utilisateur à un groupe à l'intérieur d'une unité d'organisation

DirectoryEntry ldapRoot = new DirectoryEntry(ldapString, user, password); 
DirectoryEntry userGroup = ldapRoot.Children.Find("OU=OUGroup"); 
DirectoryEntry newUser = userGroup.Children.Add("CN=" + userName, "user"); 
newUser.Properties["displayName"].Value = displayName; 

... 

newUser.CommitChanges(); 
userGroup.Close(); 
ldapRoot.Close(); 

LDAPString est quelque chose de semblable à LDAP:\\DC=company,DC=local, au fond, il est juste aller chercher l'entrée racine.

Je change plusieurs propriétés, mais tout fonctionne bien. Cependant, j'ai un autre OU appelé SharePoint_Groups, qui a un groupe à l'intérieur appelé Internal. Je veux ajouter le nouvel utilisateur en tant que membre de ce groupe, mais je ne sais pas comment le faire. J'ai essayé les éléments suivants:

DirectoryEntry spGroup = ldapRoot.Children.Find("OU=Sharepoint_Groups"); 
DirectoryEntry internal = spGroup.Children.Find("CN=Internal"); 

Il ne fonctionne pas et je ne sais pas comment je dois répondre Internal - est CN = correct ou devrais-je utiliser une autre spécification?

Et, une fois que j'ai le bon groupe, comment y ajouter l'utilisateur existant?

Merci à l'avance

Répondre

3

En gros, pour ajouter un utilisateur à un groupe existant, vous devez lier à ce groupe et le mettre à jour est member propriété, en utilisant le nom distinctif complet de l'utilisateur:

DirectoryEntry deGroup = new DirectoryEntry("LDAP://CN=Internal,OU=Sharepoint_Groups,DC=Company,DC=local"); 

string userDN = newUser.Properties["distinguishedName"][0].ToString(); 

deGroup.Properties["member"].Add(userDN); 
deGroup.CommitChanges(); 

Une excellente ressource pour ce genre de choses est l'article CodeProject How to do just about everything in Active Directory using C# - beaucoup d'exemples de code utiles!

+1

Fonctionne parfaitement, semble-t-il que l'erreur s'est produite en faisant le Add() parce que j'employais juste "CN = username" au lieu du DN complet. Merci! –

+0

Une idée de pourquoi cela fonctionne localement, mais lance "Accès refusé" lorsqu'il est déplacé vers le serveur IIS? –

+0

@PlatypusMaximus: ressemble à des autorisations - localement, ce code s'exécute dans le contexte de votre propre utilisateur - sur le web, très probablement dans le contexte de l'utilisateur du pool d'applications de IIS –