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);
}
War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top