DirectoryEntry and Domain Controller

本文关键字:Controller Domain and DirectoryEntry | 更新日期: 2023-09-27 18:06:15

我们在Powershell中使用了一个脚本来操作Active Directory。我现在用c#编程。我的同事说他们必须在PS中指定域控制器,否则可能会发生您使用DC A读取而在DC B上写入的情况,这可能会导致问题。

如果我使用DirectorySearcher来查找条目并操纵它,我真的必须指定域控制器吗?或者每个定义相同的域控制器是用户查找对象(DirectorySearcher)并保存它(CommitChanges)?

我不这么认为,因为我只能在搜索部分指定它(DirectoryEntry对象的DirectorySearcher),而不是当它被写回AD (CommitChanges)。因此,我认为用于写入的DC和用于读取的DC是一样的。

下面我有一个例子,我搜索一个特定的条目,并改变一个属性。

string filter = "(proxyaddresses=SMTP:johndoe@abc.com)";
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();

DirectoryEntry and Domain Controller

我是否建议使用System.DirectoryServices.AccountManagement命名空间中可用的对象?它是。net的最新添加,处理AD工作更加优雅。它最近为我省去了很多以前使用DirectorySearcher的心痛。让框架承受压力吧!网上有很多非常有用的文章,比如这里。

作为如何使用PrincipalContext搜索Active directory的示例,请尝试如下:

var adContext = new PrincipalContext(ContextType.Domain);
var queryTemplateUser = new UserPrincipal(adContext);
queryTemplateUser.SamAccountName = "HenryCrunn";
var ldapSearcher = new PrincipalSearcher(queryTemplateUser);
var searchResults = ldapSearcher.FindAll();