Pregunta

Estoy buscando una forma de cambiar la contraseña de una cuenta de usuario local (Administrador local) en una máquina con Windows (XP en este caso). He leído el artículo de CodeProject sobre una forma de hacerlo, pero esto simplemente no parece "limpio".

Puedo ver que esto es posible hacer con WMI , por lo que podría ser la respuesta, pero no puedo averiguar cómo usar el espacio de nombres WinNT WMI con ManagementObject. Cuando intento el siguiente código, arroja un " Parámetro no válido " excepción.

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);
}

¿Hay una mejor manera de hacer esto? (Estoy usando .NET 3.5)

Editar: Gracias Ely por señalarme en la dirección correcta. Aquí está el código que terminé 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);
}
¿Fue útil?

Solución

Pruebe la clase DirectoryEntry en lugar de la clase ManagementObject .

Otros consejos

Como señaló Ely, puede usar el código System.DirectoryServices para lograr esto según 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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top