Ändern Sie das lokale Administratorkennwort in C#
Frage
Ich suche nach einer Möglichkeit, das Kennwort eines lokalen Benutzerkontos (lokaler Administrator) auf einem Windows (in diesem Fall XP) zu ändern. Ich habe das gelesen CodeProject -Artikel Über eine Möglichkeit, dies zu tun, aber das scheint einfach nicht "sauber" zu sein.
Ich kann sehen, dass dies ist möglich mit WMI zu tun, Das mag also die Antwort sein, aber ich kann nicht herausfinden, wie man den WINNT -WMI -Namespace mit ManagementObject verwendet. Wenn ich den folgenden Code probiere, löst er eine "ungültige Parameter" -Ausnahme aus.
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);
}
Gibt es einen besseren Weg, dies zu tun? (Ich verwende .net 3.5)
Bearbeiten: Danke Ely, dass du mich in die richtige Richtung gegeben hast. Hier ist der Code, den ich verwendete:
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);
}
Lösung
Versuchen Sie das DirectoryEntry
Klasse statt von ManagementObject
Klasse.
Andere Tipps
Wie Ely festgestellt, können Sie das System verwenden. 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;