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);
}
È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top