2013-07-02 3 views
1

У меня есть список руководств пользователей Active Directory, мне нужно загрузить набор свойств этих пользователей для конкретной отчетности. Чтобы сделать это, если мы сделаем привязку для каждого Guid, тогда это будет дорогостоящим. Будь то с DirectorySearcher, можем ли мы предоставить несколько Guid (скажем 1000) в качестве фильтра и загрузить свойства ?.DirectorySearcher for multiple Guid

+0

Просто интересно, вы можете использовать что-нибудь еще кроме GUID, чтобы однозначно идентифицировать пользователей? (Например, 'SAMAccountName',' distinctName') – X3074861X

+0

@ X3074861X В настоящее время у меня есть руководство, чтобы идентифицировать пользователей. – 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();