Изменить пароль локального администратора в C #
Вопрос
Я ищу способ изменить пароль учетной записи локального пользователя (локального администратора) на компьютере с Windows (в данном случае XP). Я прочитал статью CodeProject об одном способе сделать это, но это не кажется «чистым». Р>
Я вижу, что это возможно сделать с помощью WMI , так что это может быть ответом, но я не могу понять, как использовать пространство имен WinNT WMI с ManagementObject. Когда я пытаюсь выполнить следующий код, он выдает «неверный параметр» исключение. р>
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);
}
Есть ли лучший способ сделать это? (Я использую .NET 3.5)
Изменить. Спасибо, Эли, за то, что направили меня в правильном направлении. Вот код, который я использовал в итоге:
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);
}
Решение
Попробуйте класс DirectoryEntry
вместо класса ManagementObject
.
Другие советы
Как отметил Эли, вы можете использовать код System.DirectoryServices, чтобы выполнить это в 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;