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);
}
Foi útil?

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top