Querying an LDAP

本文关键字:LDAP an Querying | 更新日期: 2023-09-27 18:00:23

我以前没有使用过LDAP,所以我有点不知所措。我需要连接到LDAP源,找到一个特定的属性并更改它。程序的输入是一个带有用户列表的CSV文件。该程序应该从CSV文件中读取UID,在LDAP中查找记录并替换某个属性。我不知道该怎么做。谁能给我指个正确的方向吗?

Querying an 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是实际用户名