Altere a senha do administrador local em C#
Pergunta
Estou procurando uma maneira de alterar a senha de uma conta de usuário local (administrador local) em uma máquina Windows (XP neste caso). Eu li o Artigo do CodeProject Sobre uma maneira de fazer isso, mas isso simplesmente não parece 'limpo'.
Eu posso ver que isso é possível ver com WMI, então essa pode ser a resposta, mas não consigo descobrir como usar o espaço para nome do Winnt WMI com o ManagementObject. Quando tento o código a seguir, ele lança uma exceção "parâmetro inválido".
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);
}
Existe uma maneira melhor de fazer isso? (Estou usando .NET 3.5)
Editar: Obrigado Ely por me apontar na direção certa. Aqui está o código que acabei usando:
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);
}
Solução
Tente o DirectoryEntry
classe em vez de ManagementObject
classe.
Outras dicas
Como observado Ely, você pode usar o System.DirectoryServices Code para conseguir isso por 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;