C# 喜欢在ActiveDirectory中搜索
我正在使用C#中的以下代码搜索LDAP,以轮询用户的active directory:C# 喜欢在ActiveDirectory中搜索,c#,active-directory,C#,Active Directory,我正在使用C#中的以下代码搜索LDAP,以轮询用户的active directory: DirectoryEntry entry = new DirectoryEntry(ldapPath, userName, password); DirectorySearcher Searcher = new DirectorySearcher(entry); Searcher.CacheResults = true; Searcher.SearchScope = SearchScope.Subtree
DirectoryEntry entry = new DirectoryEntry(ldapPath, userName, password);
DirectorySearcher Searcher = new DirectorySearcher(entry);
Searcher.CacheResults = true;
Searcher.SearchScope = SearchScope.Subtree;
Searcher.Filter = "(&(&(objectCategory=person)(objectClass=user))
(|(samaccountname=" + userSearch.SamAccountName + "*)
(&(GivenName=" + userSearch.FirstName + "*)(SN=" + userSearch.Surname +
"*))))";
Searcher.PropertiesToLoad.AddRange(new string[] {"DisplayName", "GivenName",
"DistinguishedName","Title","manager",
"mail", "physicalDeliveryOfficeName", "DirectReports", "Company",
"Description", "SAMAccountName"});
SearchResultCollection results = Searcher.FindAll();
List<ActiveUser> activeUsers = new List<ActiveUser>();
DirectoryEntry=新的DirectoryEntry(ldapPath、用户名、密码);
DirectorySearcher search=新的DirectorySearcher(条目);
Searcher.CacheResults=true;
Searcher.SearchScope=SearchScope.Subtree;
Searcher.Filter=“(&(&(objectCategory=person)(objectClass=user))
(|(samaccountname=“+userSearch.samaccountname+”*)
(&(GivenName=“+userSearch.FirstName+”*)(SN=“+userSearch.姓氏+
"*))))";
Searcher.PropertiesToLoad.AddRange(新字符串[]{“DisplayName”,“GivenName”,
“识别名称”、“头衔”、“经理”,
“邮件”、“physicalDeliveryOfficeName”、“DirectReports”、“公司”,
“说明”、“SAMAccountName”});
SearchResultCollection results=Searcher.FindAll();
List activeUsers=new List();
我使用输入参数userSearch.FirstName=“jo”和userSearch.LastName=“bl”运行它,并期望有一个用户“Joe Bloggs”,但结果列表中没有显示这个。如果我在Windows中使用Active Directory用户和计算机工具中的名称文本框尝试此操作,Joe Bloggs将作为列表中的唯一用户出现。我使用的是正确的LDAP路径。我是否使用了错误的筛选器来复制windows工具中的功能?是否对显示名称进行“相似”搜索
任何帮助都将不胜感激。如果您使用的是.NET 3.5或更高版本,您可以使用
PrincipalSearcher
和“示例查询”主体进行搜索:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// define a "query-by-example" principal - here, we search for a UserPrincipal
// and with the first name (GivenName) of "Bruce"
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.GivenName = "Jo*";
qbeUser.Surname = "Bl*";
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer.....
}
如果您还没有阅读过MSDN文章,这篇文章很好地展示了如何充分利用
System.DirectoryServices.AccountManagement
中的新功能。非常感谢,我会尝试一下,让您知道。甚至没有意识到这在3.5中已经改变了。仍然停留在过去:)@Sico:感觉就像一个传教士告诉每个人这件事:-)似乎很多人“错过”了这个新名称空间!这比使用DirectorySearcher要干净得多。谢谢