DC是您的域。如果您想连接到域example.com,则您的dc为:DC=example,DC=com
实际上,您不需要知道域控制器的主机名或IP地址(可能有很多个)。
只需想象您正在连接到域本身。因此,要连接到域example.com,您可以简单地编写
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com")
你已经完成了。
你也可以指定一个用户和密码来连接:
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com", "username", "password")
同时请确保始终使用大写字母书写LDAP。在某些地方读到应该尝试使用大写字母书写它,然后我的问题得到了解决。
directoryEntry.Path
属性允许您深入了解您的域。因此,如果您想在特定的OU(组织单位)中搜索用户,可以在那里设置它。
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com")
directoryEntry.Path = "LDAP://OU=Specific Users,OU=All Users,OU=Users,DC=example,DC=com"
这将匹配以下AD层次结构:
只需按照从最深到最高的顺序编写层次结构即可。
现在你可以做很多事情
例如,通过账户名搜索用户并获取用户的姓氏:
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://example.com");
DirectorySearcher searcher = new DirectorySearcher(directoryEntry) {
PageSize = int.MaxValue,
Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=AnAccountName))"
};
searcher.PropertiesToLoad.Add("sn");
var result = searcher.FindOne();
if (result == null) {
return;
}
string surname;
if (result.Properties.Contains("sn")) {
surname = result.Properties["sn"][0].ToString();
}