我正在为 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,而我是在本地进行的。
有比我更了解的专家吗?我什至尝试寻找一种通过命令行执行此操作的方法,以便我可以创建一个进程,但我也无法找到一种方法来执行此操作。
最佳答案
对于 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。不一致怎么办!)
关于c# - 使用 C# 强制本地用户在下次登录时更改密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886713/