C# Active Directory Добавление пользователя

Я пытаюсь создать пользователя с текстовыми полями, которые необходимо заполнить. Свойства, имя пользователя и пароль верны, но я получаю сообщение об ошибке "На сервере нет такого объекта".

private void btn_AddStudent_Click(object sender, EventArgs e)
    {
        try
        {
            // Username and password.
            string UserName = UsernameGenerate(8);
            string Password = PasswordGenerate(8);

            // OU path.
            string ouString = "OU = " + cmb_Study.Text;
            string LDAPstring = "LDAP://" + "OU = Studies, " + ouString + ", DC=DR, DC=GUI";
            DirectoryEntry dirEntry = new DirectoryEntry(LDAPstring);

            // Create user.
            string userString = "CN = " + UserName;
            DirectoryEntry newUser = dirEntry.Children.Add(userString, "user");
            newUser.CommitChanges();

            newUser.Properties["userprincipalname"].Add(UserName + "@DR.GUI");
            newUser.Properties["samaccountname"].Value = UserName;
            newUser.Invoke("setPassword", new object[] {Password});
            //Rest of the properties

            newUser.Close();
            dirEntry.Close();
            newUser.Dispose();
            dirEntry.Dispose();
            MessageBox.Show("User has been succesfully added");
        }
        catch (Exception E)
        {
            MessageBox.Show("Creating user has failed. " + E.Message);
        }
    }

Я уже давно пытаюсь найти решение, но до сих пор не понимаю, в чем проблема. Я сделал ошибку в пути OU? Например, OU= Исследования /ISM или Исследования /WEBDEV. Или я сделал какие-либо ошибки в моем LDAP?

Я довольно новичок в C# и программирую в общем, я ищу простое решение, если это возможно.

1 ответ

Решение

Я обнаружил, что менее болезненный способ справиться с этим - PrincipalContext

Другие способы, такие как PInvoke или DirectoryServices, так или иначе вызывали у меня головную боль.

Если у вас есть права, это работает без нареканий:

try
{
   using (var pcLocal = new PrincipalContext(ContextType.Machine))
   {
      var group = GroupPrincipal.FindByIdentity(pcLocal, "Administrators");

      using (var pcDomain = new PrincipalContext(ContextType.Domain, "AAA"))
      {
         group.Members.Add(pcDomain, IdentityType.SamAccountName, "User123");                            group.Save();
      };
   };
} catch (Exception e)
{
   Console.WriteLine(e.Message);
};

или также:

using(PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "Fabrikam", "ou=TechWriters,dc=fabrikam,dc=com"))
{

 UserPrincipal user = new UserPrincipal(ctx, userName, userPassword, true);

    // assign some properties to the user principal
    user.GivenName = "User";
    user.Surname = "One";

    // force the user to change password at next logon
    user.ExpirePasswordNow();

    // save the user to the directory
    user.Save();
}

Для создания пользователя в подпрограмме попробуйте:

//ADPath1 = LDAP://x.x.x./OU=OUStudents,DC=mydomain,DC=local
//ADUser = AD Admin User
//ADPassword = AD Admin user's password
 DirectoryEntry de = new DirectoryEntry(ADPath1, ADUser, ADPassword, AuthenticationTypes.Secure);
            // 1. Create user account
            DirectoryEntries users = de.Children;
            DirectoryEntry newuser = users.Add("CN=" + userid, "user");
           //2. Set properties
//....

newuser.CommitChanges();
Другие вопросы по тегам