Cambia la password dell'amministratore locale in C #
Domanda
Sto cercando un modo per cambiare la password di un account utente locale (amministratore locale) su una macchina Windows (XP in questo caso). Ho letto l'articolo CodeProject su un modo per farlo, ma questo non sembra 'pulito'.
Vedo che questo è possibile fare con WMI , quindi potrebbe essere la risposta, ma non riesco a capire come utilizzare lo spazio dei nomi WMI WinNT con ManagementObject. Quando provo il seguente codice, viene emesso un " Parametro non valido " fa eccezione.
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);
}
C'è un modo migliore per farlo? (Sto usando .NET 3.5)
Modifica: Grazie Ely per avermi indicato nella giusta direzione. Ecco il codice che ho finito per usare:
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);
}
Soluzione
Prova la classe DirectoryEntry
invece della classe ManagementObject
.
Altri suggerimenti
Come notato da Ely, è possibile utilizzare il codice System.DirectoryServices per eseguire ciò in 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;