2011-05-25 42 views
4

假设我有一个SID列表。快速查询活动目录

目前我在为每个SID查询AD。类似于

foreach(string sidString in listOfSid) 
{ 
    DirectorySearcher search = new .... 

    search.Filter = string.Format("(objectSid={0})", ConvertToOctetString(sidString)); 

    var result = search.FindOne(); 

    ..... 
} 

有没有比这更快的方法?有没有办法循环查询所有信息,而不是循环?

+0

它必须在C#中完成吗? – benPearce 2011-05-25 22:31:24

回答

5

我不知道我理解你的问题,但你为什么不在循环中建立一个过滤器,然后搜索一次。该过滤器会像:

(|(objectSid=sid1)(objectSid=sid2)(...)(objectSid=sidn)) 

如果你有.NET 3.5或更高版本,那么你可以work with principals

根据How Active Directory Searches Work,服务器尝试处理的最大LDAP请求大小为10485760字节。如果服务器接收到大于此值的请求,它将关闭连接。话虽如此,我从来没有测试过它。

+0

谢谢!这就是它!我不确定过滤器的语法如何。现在我明白了。 – pdiddy 2011-05-26 12:39:19

+0

有点奇怪,它使用波兰语法(PN)或Prefic表示法,这是数学表示法,其中每个运算符都为其所有操作数加上字母。 – JPBlanc 2011-05-26 13:49:40

+0

感谢您的知识!我想知道这是什么语法。 – pdiddy 2011-05-26 16:32:18