Если вы хотите, чтобы взаимодействовать с Active Directory, вы не должны знать, где FSMO роли по большей части. Если вы хотите изменить топологию AD из своей программы (я бы этого не сделал), посмотрите на класс DomainController.
Если вы хотите изменить пароль пользователя, вы можете вызвать эти действия в объекте User, а Active Directory будет убедиться, что изменения были правильно реплицированы.
скопирована из http://www.rootsilver.com/2007/08/how-to-change-a-user-password
public static void ChangePassword(string userName, string oldPassword, string newPassword)
{
string path = "LDAP://CN=" + userName + ",CN=Users,DC=demo,DC=domain,DC=com";
//Instantiate a new DirectoryEntry using an administrator uid/pwd
//In real life, you'd store the admin uid/pwd elsewhere
DirectoryEntry directoryEntry = new DirectoryEntry(path, "administrator", "password");
try
{
directoryEntry.Invoke("ChangePassword", new object[]{oldPassword, newPassword});
}
catch (Exception ex) //TODO: catch a specific exception ! :)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("success");
}
Это не будет работать для ситуации в междоменном пространстве (например, ваш компьютер не является частью домена, где существует контроллер домена). См. Мой ответ для такого решения. –
@Firo: Спасибо, исправлено. Ошибка была исправлена с помощью 'string []' -> 'IEnumerable' –
abatishchev