DirectorySearcher for multiple Guid
本文关键字:Guid multiple for DirectorySearcher | 更新日期: 2023-09-27 18:20:39
我有Active Directory用户的Guid列表,我需要为特定的报告加载这些用户的一组属性。要做到这一点,如果我们为每个Guid进行绑定,那么这将是一个代价高昂的绑定。无论使用DirectorySearcher,我们是否可以提供多个Guid(比如1000)作为筛选器并加载属性?。
目前我不知道如何在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();