Jeśli szukasz do interakcji z usługą Active Directory, nie powinno się wiedzieć, gdzie FSMO role są w przeważającej części. Jeśli chcesz zmienić topologię AD ze swojego programu (nie chciałbym), spójrz na klasę DomainController.
Jeśli chcesz zmienić hasło użytkownika, możesz wywołać te działania w obiekcie użytkownika, a usługa Active Directory upewni się, że zmiany zostały prawidłowo zreplikowane.
skopiowane z 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");
}
Nie będzie działać w przypadku sytuacji międzydomenowej (np. Twój komputer nie jest częścią domeny, w której istnieje kontroler domeny). Zobacz moją odpowiedź na takie rozwiązanie. –
@Firo: Dzięki, naprawione. Błąd został naprawiony przez 'string []' -> 'IEnumerable' –
abatishchev