Question

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 la façon de procéder, mais cela ne semble pas «propre».

Je vois que c'est possible de faire avec WMI , cela pourrait donc être la solution, mais je ne vois pas comment utiliser l'espace de noms WMI WinNT avec ManagementObject. Lorsque j'essaie le code suivant, un "Paramètre non valide" est généré. 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);
}

Y a-t-il une meilleure façon de faire cela? (J'utilise .NET 3.5)

Modifier: Merci, Ely, de m'avoir orienté dans la bonne direction. Voici le code que j'ai fini par utiliser:

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);
}
Était-ce utile?

La solution

Essayez la classe DirectoryEntry au lieu de la classe ManagementObject .

Autres conseils

Comme Ely l’a noté, vous pouvez utiliser le code System.DirectoryServices à cette fin pour 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top