Querying an LDAP
本文关键字:LDAP an Querying | 更新日期: 2023-09-27 18:00:23
我以前没有使用过LDAP,所以我有点不知所措。我需要连接到LDAP源,找到一个特定的属性并更改它。程序的输入是一个带有用户列表的CSV文件。该程序应该从CSV文件中读取UID,在LDAP中查找记录并替换某个属性。我不知道该怎么做。谁能给我指个正确的方向吗?
@KenL差点把我带到那里。我还必须设置DirectoryEntry的AuthenticationType才能使其工作。此外,请注意如何使用通配符(Kleene Stars)。
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://some.ldap.server.com");
rootEntry.AuthenticationType = AuthenticationTypes.None; //Or whatever it need be
DirectorySearcher searcher = new DirectorySearcher(rootEntry);
var queryFormat = "(&(objectClass=user)(objectCategory=person)(|(SAMAccountName=*{0}*)(cn=*{0}*)(gn=*{0}*)(sn=*{0}*)(email=*{0}*)))";
searcher.Filter = string.Format(queryFormat, searchString);
foreach(SearchResult result in searcher.FindAll())
{
Console.WriteLine("account name: {0}", result.Properties["samaccountname"].Count > 0 ? result.Properties["samaccountname"][0] : string.Empty);
Console.WriteLine("common name: {0}", result.Properties["cn"].Count > 0 ? result.Properties["cn"][0] : string.Empty);
}
第一个响应元素,使用ADSI(老式)
如何用C#在Active Directory上做几乎所有的事情(使用ADSI)
响应的第二个元素,从.NET 3.5开始,Microsoft引入了"Principal"answers"AccountManagement'。
如何用C#在Active Directory上做几乎所有事情(使用AccountManagement)
响应的第三个元素,您可以将低级别(本机LDAP)协议与System.DirectoryServices.Protocols(S.DS.p)一起使用。
备注:如果您对如何从本机代码查询活动目录感兴趣,您可以查看RFC 1823中描述的LDAP C-Binding API,Microsoft支持它,请参阅轻量级目录访问协议(LDAP)的MS策略。您可以在轻量级目录访问协议中找到Microsoft API的使用和参考手册。
代码方面,它比您想象的要简单得多。您需要创建到目录的连接,设置搜索器,然后按属性名称进行搜索。
DirectoryEntry entry = new DirectoryEntry("LDAP://MyDomain.com");
DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.Filter = "(&(objectCategory=person)(objectClass=user)(" + SType + "=" + Name + "))";
SType是名称类型,name是实际用户名