2013-07-02 48 views
1

我有Active Directory用戶Guid的列表,我需要爲特定報告加載這些用戶的一組屬性。要做到這一點,如果我們爲每個Guid綁定,那麼這將是一個昂貴的。無論使用DirectorySearcher,我們是否可以提供多個Guid(例如1000)作爲過濾器並加載屬性?DirectorySearcher多個Guid

+0

只是好奇,你可以使用別的除了唯一標識用戶的GUID? (例如'SAMAccountName','distinguishedName') – X3074861X

+0

@ X3074861X目前我只有Guid來識別用戶。 – prabna

回答

0

目前我不知道如何以編程方式在C#中執行此操作,但是如果您要編寫原始LDAP查詢,則可以決定是否通過AND或OR組合多個參數。要做到這一點,你必須打開一個組(使用一個正常的大括號"("),並定義組內的所有元素是否應該與之匹配"&"或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)) 
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();