5

我正在为 ASP.NET 中的 Web 应用程序编写一个函数,其中客户端登录到服务器机器,这是 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,我在本地执行此操作。

有没有比我更了解的专家?我什至尝试通过命令行寻找一种方法来执行此操作,以便我可以创建一个进程,但我也无法找到一种方法来做到这一点。

4

1 回答 1

7

对于 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。不一致是怎么回事!)

于 2010-10-07T23:51:53.473 回答