DirectorySearcher для нескольких Guid

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

2 ответа

В настоящее время я не знаю, как это сделать программно в 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))

Вы должны преобразовать 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();
Другие вопросы по тегам