更改本地Windows用户的密码

时间:2014-08-19 14:38:05

标签: c# directoryservices user-management

通常可以在Windows中更改自己的密码,没有管理员权限

我正在编写一个工具来管理多个服务器/客户端上的用户和组。我还想让客户有权编辑自己的密码。客户当然没有管理员权限。要更改用户密码拥有管理员权限,我使用了DirectoryEntry,如下所示:

try
{
    DirectoryEntry localDirectory = 
        new DirectoryEntry("WinNT://" + Environment.MachineName.ToString());
    DirectoryEntries users = localDirectory.Children;
    DirectoryEntry user = users.Find(username);
    user.Invoke("SetPassword", newPassword);

    Console.WriteLine("Success!");
    Console.ReadLine();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
    Console.ReadLine();
}

这里的问题是,如果没有admin-rights,则DirectoryServices不可用。因此,我希望有一个无需管理员权限的解决方案(仅用于更改您自己的密码)。

2 个答案:

答案 0 :(得分:4)

SetPassword需要管理员权限才能执行 - 这不是您可能想要做的事情。 ChangePassword不会,也不会被最终用户自己使用。它将旧密码和新密码作为参数。 这将是执行此操作的首选方式,它还将验证其身份。

答案 1 :(得分:1)

理论上,您可以使用WinNT提供程序来实例化DirectoryEntry对象,从而使用户无需提供域管理员权限即可更改密码。您还可以考虑使用加密数据库存储管理员凭据的代码here

这可能是一个危险的举动,取决于你的存储的性质(你可以使用机器的MAC地址的哈希作为密码吗?),但我不确定还有另一种做法这个。据我所知,eMi提供的答案在没有经过身份验证的DirectoryEntry实例的情况下无效,但我可能错了。