2010-11-04 2 views
2

У меня есть код с использованием DirectoryEntry для управления локальной Active Directory через LDAP. В настоящее время я найти конкретный OU, добавить пользователь к нему, обновить свойства пользователя, а затем совершить все изменения:LDAP: Как добавить нового пользователя в группу внутри OU

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 что-то сродни LDAP:\\DC=company,DC=local, в основном это просто извлечение корневой записи.

Я изменяю несколько свойств, но все работает нормально. Тем не менее, у меня есть еще один OU, называемый SharePoint_Groups, в котором есть группа внутри Internal. Я хочу добавить нового пользователя в качестве члена этой группы, но я не понимаю, как это сделать. Я попытался следующие:

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

Это не работает, и я не знаю, как мне следует обратиться Internal - это CN = правильно или я должен использовать некоторые другие спецификации?

И как только у меня есть правильная группа, как мне добавить к ней существующего пользователя?

Заранее спасибо

ответ

3

В основном, чтобы добавить пользователя в существующую группу, вы должны связываться с этой группой и обновлять это member свойство, используя полное отличительное имя пользователя:

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

Отличным ресурсом для таких вещей является статья CodeProject How to do just about everything in Active Directory using C# - множество полезных образцов кода!

+1

Работала отлично, кажется, что это ошибка при выполнении Add(), потому что я использовал только «CN = username» вместо полного DN. Благодаря! –

+0

Любая идея, почему это работает локально, но выбрасывает «Доступ запрещен» при перемещении на сервер IIS? –

+0

@PlatypusMaximus: звучит как разрешения - локально этот код запускается в контексте вашего собственного пользователя - в Интернете, скорее всего, в контексте пользователя пула приложений IIS –

Смежные вопросы