在C#中更改本地管理员密码

我正在寻找一种方法来更改Windows(本例中为XP)计算机上的本地用户帐户(本地管理员)的密码。 我已经阅读了关于一种方法的CodeProject文章 ,但这似乎并不“干净”。

我可以看到这可能与WMI有关 ,所以这可能是答案,但我无法弄清楚如何将WinNT WMI命名空间与ManagementObject一起使用。 当我尝试以下代码时,它会抛出“无效参数”exception。

public static void ResetPassword(string computerName, string username, string newPassword){ ManagementObject managementObject = new ManagementObject("WinNT://" + computerName + "/" + username); // Throws Exception object[] newpasswordObj = {newPassword}; managementObject.InvokeMethod("SetPassword", newpasswordObj); } 

有一个更好的方法吗? (我使用的是.NET 3.5)

编辑:谢谢Ely指出我正确的方向。 这是我最终使用的代码:

 public static void ResetPassword(string computerName, string username, string newPassword) { DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("WinNT://{0}/{1}", computerName, username)); directoryEntry.Invoke("SetPassword", newPassword); } 

尝试使用DirectoryEntry类而不是ManagementObject类。

正如Ely所指出的,您可以使用System.DirectoryServices代码来实现每个MSDN :

 String myADSPath = "LDAP://onecity/CN=Users, DC=onecity,DC=corp,DC=fabrikam,DC=com"; // Create an Instance of DirectoryEntry. DirectoryEntry myDirectoryEntry = new DirectoryEntry(myADSPath); myDirectoryEntry.Username = UserName; myDirectoryEntry.Password = SecurelyStoredPassword;