2008-10-24 95 views
9

我正在寻找一种方法来更改Windows(本例中为XP)机器上的本地用户帐户(本地管理员)的密码。我已阅读CodeProject article关于实现此目标的一种方法,但这看起来并不“干净”。更改C#中的本地管理员密码

我可以看到这是possible to do with WMI,所以这可能是答案,但我无法弄清楚如何在ManagementObject中使用WinNT WMI命名空间。当我尝试下面的代码时,它会抛出一个“Invalid Parameter”异常。

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)

编辑:感谢伊利指着我在正确的方向。这是我最后使用的代码:

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); 
} 

回答

2

尝试,而不是ManagementObjectDirectoryEntry类。

1

正如伊利指出,你可以使用的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; 
+1

感谢您的帮助,但这个例子是使用LDAP到Active Directory,这个问题是关于一个本地帐户。 – 2008-10-27 03:08:18