Заставить локального пользователя сменить пароль при следующем входе в систему с помощью С#

Я пишу функцию для веб-приложения в ASP.NET, где клиент входит в серверную машину, которая проходит проверку подлинности Windows по отношению к локальным пользователям на сервере. Функция, которую я пишу, сбрасывает пароль пользователей и отправляет им новый по электронной почте. Я делаю это так:

String userPath = "WinNT://"  + Environment.MachineName + "/" + username.Text;
DirectoryEntry de = new DirectoryEntry(userPath);
de.Invoke("SetPassword", new object[] { password });

Как я могу также установить флаг, чтобы заставить пользователя изменить свой пароль при следующем входе в систему с паролем, отправленным им по электронной почте? Я попытался использовать pwdLastSet так:

de.Properties["pwdLastSet"].Value = 0;

Но это, по-видимому, работает только с LDAP, а не с WinNT, и я делаю это локально.

Есть специалисты, знающие лучше меня? Я даже пытался найти способ сделать это через командную строку, чтобы я мог просто создать процесс, но я также не смог найти способ сделать это таким образом.


person jnevelson    schedule 07.10.2010    source источник


Ответы (1)


Для WinNT необходимо установить значение 1, а не 0, а имя свойства — «PasswordExpired», а не «pwdLastSet»; см. http://msdn.microsoft.com/en-us/library/aa746542(VS.85).aspx

Другими словами, сделайте это для WinNT:

de.Properties["PasswordExpired"].Value = 1;

(Это сбивает с толку, я знаю, но для LDAP нужно установить свойство "pwdLastSet" в 0. Как вам такое несоответствие!)

person CesarGon    schedule 07.10.2010