我有 Active Directory 用户的 Guid 列表,我需要为特定报告加载这些用户的一组属性。为此,如果我们为每个 Guid 进行绑定,那么这将是一个代价高昂的绑定。无论是使用 DirectorySearcher,我们是否可以提供多个 Guid(比如 1000)作为过滤器并加载属性?
问问题
865 次
2 回答
0
您应该将您的 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();
于 2013-08-08T10:43:56.410 回答
0
目前我不知道如何在 C# 中以编程方式执行此操作,但如果您要编写原始 LDAP 查询,您可以决定多个参数是否通过 AND 或 OR 组合。为此,您必须打开一个组(使用普通大括号"("
)并定义组内的所有元素是否应为 ANDed"&"
或 ORed "|"
。
这是一个例子:
(|(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))
于 2013-07-02T14:12:45.913 回答