Сменить удаленный пароль (в коде .Net 3.5) - PullRequest
0 голосов
/ 01 сентября 2009

Из-за аутентификации наших клиентов и топологии сети у нас есть несколько серверов Windows в DMZ без Active Directory или контроллера домена. Корпоративная политика предусматривает, что пароли должны меняться раз в месяц. Наши устройства разработки находятся в AD (не в DMZ), поэтому мы сталкиваемся с ситуацией, когда нам приходится синхронизировать наши имена пользователей и пароли на каждой из DMZ-машин с нашими учетными данными AD каждый месяц. Есть много машин DMZ.

Я хочу использовать простое консольное приложение для изменения паролей пользователей на всех машинах DMZ для данного пользователя. Пока у меня есть следующий код:

using System.Collections.Generic;
using System.DirectoryServices.AccountManagement;
class Program{
    static void Main(){
        List<string> remoteHosts = new List<string> { "RemoteHostA", "RemoteHostB", "RemoteHostC" };
        remoteHosts.ForEach(host => ChangePassword(host, "username", "oldPassword", "newPassword"));
    }
    static void ChangePassword(string host, string username, string oldPassword, string newPassword){
        using (var context = new PrincipalContext(ContextType.Machine, host, username, newPassword))
            using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username))
                user.ChangePassword(oldPassword, newPassword);
    }
}

Проблема в том, что это работает, только если пароль еще не изменился на компьютере разработчика, с которого он запускается. Поскольку используемый контекст сначала должен пройти аутентификацию на компьютере разработчика, чтобы получить доступ к сети, он должен получить доступ к удаленному (DMZ) компьютеру, используя тот же контекст, прежде чем менять пароль.

Как изменить метод для использования контекста нового пароля для получения доступа к сети и контекста старого пароля для получения доступа к удаленному хосту?

Примечание для редакторов титров: код зависит от System.DirectoryServices.AccountManagement, который является сборкой FX 3.5, а не 3.0.

1 Ответ

2 голосов
/ 01 сентября 2009

Можете ли вы использовать WMI напрямую для достижения этой цели? Быстрый поиск показал эту страницу

Примечание: я давно ничего не делал с WMI, но я помню, что мог вызывать его из приложения на C #, если вам удобно его использовать. (Проверьте в System.Management)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...