Changer le mot de passe de l’administrateur local en C #

Je cherche un moyen de changer le mot de passe d’un compte d’utilisateur local (administrateur local) sur une machine Windows (XP dans ce cas). J’ai lu l’ article CodeProject sur une façon de faire cela, mais cela ne semble tout simplement pas “propre”.

Je peux voir que cela est possible avec WMI . C’est peut-être la solution, mais je ne vois pas comment utiliser l’espace de noms WinNT WMI avec ManagementObject. Lorsque j’essaie le code suivant, une exception “Paramètre non valide” est générée.

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

Y a-t-il une meilleure manière de faire cela? (J’utilise .NET 3.5)

Edit: Merci Ely pour m’avoir dirigé dans la bonne direction. Voici le code que j’ai fini par utiliser:

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

Essayez la classe DirectoryEntry au lieu de ManagementObject classe ManagementObject .

Comme indiqué par Ely, vous pouvez utiliser le code System.DirectoryServices pour effectuer ceci par MSDN :

 Ssortingng 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;