У нас был сценарий в Powershell, где мы манипулировали Active Directory. Я запрограммировал его сейчас на C#. Мои коллеги говорят, что им нужно было указать контроллер домена в PS, потому что иначе может случиться, что вы читаете с DC A и записываете на DC B, что может вызвать проблемы.DirectoryEntry и контроллер домена
Должен ли я указывать контроллер домена, если я использую DirectorySearcher, чтобы найти запись и манипулировать ею? Или по определению один и тот же контроллер домена является пользователем для поиска объекта (DirectorySearcher) и сохраняет его (CommitChanges)?
Я так не думаю, так как я могу указать его только в поисковой части (объект DirectoryEntry для DirectorySearcher), но не тогда, когда он будет записан обратно в AD (CommitChanges). Поэтому я полагаю, что тот же DC используется для записи, как тот, который используется для чтения.
Ниже приведен пример, когда я ищу конкретную запись и изменяю свойство.
string filter = "(proxyaddresses=SMTP:[email protected])";
string searchOU = "ou=Users,dc=abc,dc=com";
DirectoryEntry entry = new DirectoryEntry("LDAP://" + searchOU);
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = filter;
SearchResult result = search.FindOne();
search.Dispose();
entry.Close();
DirectoryEntry toContact = result.GetDirectoryEntry();
toContact.Properties["showInAddressBook"].Value = addressbook;
toContact.CommitChanges();
toContect.Close();
Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/13612911) – techspider
Да, вы совершенно правы, конечно. Извиняюсь, я обновлю ответ полезным кодом. – DrMistry
@DrMistry: парень из Microsoft попросил меня использовать DirectorySearcher, потому что он более гибкий. Проблема в том, что ссылка также не отвечает на вопрос о контроллере домена. Объекты в «searchResults» «помните», какой DC они использовали для поиска объекта и используют его, если я обновляю найденные объекты? BTW: Следите за тем, чтобы использовать FindAll(), вам нужно уничтожить найденные объекты, иначе у вас будет утечка памяти. – Diver