C # Не могу добавить пользователя в Active Directory. Это показывает ошибку Нет такого объекта на сервере - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу использовать C # добавить пользователя в Active Directory с моего компьютера. AD установить на сервере 10.1.1.5 Имя пользователя и пароль для входа в AD - «Администратор», «Pass12345678». Я создаю имя OU Гость в AD.

Это мой код для добавления пользователя в AD.

private void Btn_ok_Click(object sender, EventArgs e)
        {
            UserInfo newUserInfo;
            newUserInfo.firstName = "TestName" ;
            newUserInfo.lastName = "TestLastName";
            newUserInfo.displayName = "TestName Lastname";

            newUserInfo.username = "TestName.t";
            newUserInfo.sAMAccountName = "TestName.t";

            DirectoryEntry adUserFolder = new DirectoryEntry("LDAP://10.1.1.5/CN=Users,OU=Guest,DC=myhome,DC=com", "Administrator", "Pass12345678");

/******** It show error this line **********/

            if(adUserFolder.SchemaEntry.Name == "container")
            {
                DirectoryEntry newUser = adUserFolder.Children.Add("CN=" + newUserInfo.username, "User");

                if (DirectoryEntry.Exists(newUser.Path))
                {
                    //Remove exist user
                    adUserFolder.Children.Remove(new DirectoryEntry(newUser.Path));

                 }

                newUser.Properties["sAMAccountName"].Value = newUserInfo.sAMAccountName;
                newUser.Properties["givenName"].Value = newUserInfo.firstName;
                newUser.Properties["sn"].Value = newUserInfo.lastName;
                newUser.Properties["displayName"].Value = newUserInfo.displayName;

                newUser.CommitChanges();
                newUser.Invoke("setpassword", "Test123456");

                newUser.CommitChanges();

            }
        }

когда я нажимаю кнопку ОК, отображается ошибка.

System.DirectoryServices.DirectoryServicesCOMException: 'Нет такой объект на сервере. «

в строке

if (adUserFolder.SchemaEntry.Name == "container")

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Конструктор DirectoryEntry никогда не сгенерирует исключение. На самом деле он не подключается к AD, пока вы не начнете использовать его. Поскольку эта линия используется впервые adUserFolder, именно тогда она впервые подключается к AD.

Ошибка означает, что она говорит: нет объекта с distinguishedName из CN=Users,OU=Guest,DC=myhome,DC=com.

Вы уверены, что имеете это право? Похоже, вы ищете контейнер с именем Users внутри подразделения с именем Guest. Это то, что вы пытаетесь сделать?

Является ли Users контейнером или подразделением?

Вы можете подтвердить distinguishedName, используя AD Users and Computers: перейдите к нужному объекту -> щелкните правой кнопкой мыши -> «Свойства» -> вкладка «Редактор атрибутов» и посмотрите на атрибут distinguishedName.

0 голосов
/ 13 ноября 2018

Для создания пользовательских объектов в активном каталоге я всегда использовал UserPrincipals, а не DirectoryEntries:

public void create(string lanid, string new_password, string container)
    {
        using (UserPrincipal new_user = new UserPrincipal(new PrincipalContext(ContextType.Domain, this.domain_string, container)))

        {
            new_user.SamAccountName = lanid;
            new_user.SetPassword(new_password);
            new_user.Enabled = true;
            new_user.Save();
        }
    }

В этом примере «контейнер» будет выглядеть примерно так:

"OU=container,OU=container,OU=container,OU=container,DC=domain,DC=domain,DC=domain";

Что касается вашей первоначальной ошибки с DirectoryEntries, я бы прошел через нее и посмотрел, действительно ли объект установлен на что-либо:

Строка:

"LDAP://10.1.1.5/CN=Users,OU=Guest,DC=myhome,DC=com"

Не выглядит мне правильно;

"LDAP://CN=10.1.1.5,CN=Users,OU=Guest,DC=myhome,DC=com"

Может работать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...