Возможно, это просто ошибка в вашем вопросе, но код, который вы показываете в первом примере, не скомпилируется, потому что пароль не в кавычках. Это должно быть:
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();