DirectorySearcher for multiple Guid

本文关键字:Guid multiple for DirectorySearcher | 更新日期: 2023-09-27 18:20:39

我有Active Directory用户的Guid列表,我需要为特定的报告加载这些用户的一组属性。要做到这一点,如果我们为每个Guid进行绑定,那么这将是一个代价高昂的绑定。无论使用DirectorySearcher,我们是否可以提供多个Guid(比如1000)作为筛选器并加载属性?。

DirectorySearcher for multiple Guid

目前我不知道如何在C#中以编程方式实现这一点,但如果您要编写一个原始LDAP查询,您可以决定是用AND还是or组合多个参数。要做到这一点,您必须打开一个组(使用普通大括号"("),并定义组中的所有元素应该是and的"&"还是or的"|"

这里有一个例子:

(|(msExchMailboxGuid='AD'26'05'EA'5D'C9LD'696'11'40'21'9BSM)
  (msExchMailboxGuid=i8'162'97'39'B0G'BA'ABR'34'AD'1F'AB'9C)
  (msExchMailboxGuid='A3'99'AC'3A'2B'E8'82F'AB'19'FF'29h2W'0E))

您应该将GUID转换为八位字节字符串,然后将其插入ldap过滤器,如下所示:

Guid guid = new Guid(); // your guid value
byte[] byteGuid = guid.ToByteArray();
string octetStr = byteGuid.Aggregate("", (current, b) => current + (@"'" + b.ToString("x2")));
string query = "(&(edsaapoguid=" + octetStr + ")(objectClass=user))";
string path = "LDAP://" + yourDomain.com + "/" + "OU=rootOU,DC=yourDomain,DC=com";
DirectoryEntry searchRoot = new DirectoryEntry(path, yourDomain + @"'" adminName, password);
DirectorySearcher searcher = new DirectorySearcher(searchRoot, query)
         {
            SearchScope = SearchScope.Subtree
         };
SearchResultCollection results = searcher.FindAll();