Невозможно установить пароль и включить учетную запись с помощью C # и администратора. - PullRequest
0 голосов
/ 11 октября 2019

Используя WPF & C # , я могу установить все атрибуты в Active Directory, но не могу сделать следующее:

1) Невозможно установить Пароль пользователя

2) Невозможно включить Пользователь

Однако я могу сделать то же самое вручную!

Попытка подхода:

1.

DirectoryEntry directoryEntry=

directoryEntry.Invoke("SetPassword", new object[] {myPass@x6712}); // To set password

directoryEntry.Properties["userAcountControl"].Value=0x0200; //To Enable User

2.

DirectoryEntry uEntry = new DirectoryEntry(userDn);
uEntry.Invoke("SetPassword", new object[] { password });
uEntry.Properties["LockOutTime"].Value = 0; //unlock account

3.

using (var context = new PrincipalContext( ContextType.Domain ))
{
  using (var user = UserPrincipal.FindByIdentity( context, IdentityType.SamAccountName, userName ))
  {
      user.SetPassword( "newpassword" );
      // or
      user.ChangePassword( "oldPassword", "newpassword" );

      user.Save();
  }
}

ОШИБКА НА ПАРОЛЕ НАСТРОЙКА : Исключение было вызвано целевым вызовом.

ОШИБКА ПРИ ВКЛЮЧЕНИИ ПОЛЬЗОВАТЕЛЯ : Доступ запрещен.

ПРИМЕЧАНИЕ: Я используюa Администратор домена.

Программа выдает исключение в этих вышеприведенных строках.

Пожалуйста, Совет! Заранее спасибо !!

1 Ответ

0 голосов
/ 11 октября 2019

Возможно, это просто ошибка в вашем вопросе, но код, который вы показываете в первом примере, не скомпилируется, потому что пароль не в кавычках. Это должно быть:

directoryEntry.Invoke("SetPassword", new object[] {"myPass@x6712"});

Этот код вызывает IADsUser.SetPassword. «Замечания» в документации указывают на некоторые предпосылки для его работы, а именно на то, что это должно быть безопасное соединение. Таким образом, возможно, не удалось установить безопасное соединение. Обычно он пытается это сделать с помощью Kerberos, поэтому что-то там может пойти не так.

Вы можете попробовать специально подключиться через LDAPS (LDAP через SSL), указав его на порту 636 (new DirectoryEntry("LDAP://example.com:636/CN=whatever,DC=example,DC=com")), но для этого требуетсячто вы доверяете выданному сертификату. Иногда это самозаверяющий сертификат, поэтому вам необходимо добавить сертификат в доверенные сертификаты на любом компьютере, с которого вы запускаете его.

Или учетная запись, с которой вы его используете, не имеет «Сбросить пароль». 'разрешение для учетной записи.

Для включения атрибут userAccountControl является битовым флагом, поэтому вы не хотите устанавливать его на 2, в основном потому, что 2(или, точнее, второй бит ) означает, что он отключен. Итак, вы хотите сбросить второй бит . Это можно сделать следующим образом:

directoryEntry.Properties["userAcountControl"].Value =
    (int) directoryEntry.Properties["userAcountControl"].Value & ~2;

Большую часть времени это приведет к значению 512 (NORMAL_ACCOUNT), но не обязательно. В учетной записи могут быть установлены другие биты, которые вы не хотите случайно сбросить.

Вам также нужно позвонить .CommitChanges(), чтобы изменения в userAcountControl вступили в силу:

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