我们在Powershell中创建了一个脚本,用于处理Active Directory。我现在用C#编写了它。我的同事们说他们必须在PS中指定域控制器,否则可能会发生这种情况,您用DC A读取并在DC B上写入可能会导致问题。DirectoryEntry和域控制器
如果我使用DirectorySearcher查找条目并对其进行操作,是否真的必须指定域控制器?或者每个定义是否有相同的域控制器是用于查找对象(DirectorySearcher)并保存它(CommitChanges)的用户?
我不这么认为,因为我只能在搜索部分(DirectorySearcher的DirectoryEntry对象)中指定它,而不是在写回到AD(CommitChanges)时才指定它。所以我认为用同样的DC来书写就像用于阅读的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:微软的一个人问我使用DirectorySearcher,因为它更灵活。问题是该链接也不回答关于域控制器的问题。 “searchResults”中的对象“记住”他们用来查找对象的DC,并且如果我更新找到的对象时使用相同的DC?顺便说一句:小心使用FindAll()时,你必须处理找到的对象,否则你有内存泄漏。 – Diver