Поиск GUID объекта в AD

Я использую Active Directory Explorer от Марка Руссиновича. Это отличный инструмент.

Я использую его для навигации по активному каталогу, чтобы убедиться, что моя программа, использующая DirectorySearcher из .NET, возвращает правильные данные.

Что-то происходит, однако, когда я пытаюсь выполнить поиск в своей программе с помощью DirectorySearcher для objectGUID, если я передаю фактический GUID в виде строки, он ничего не возвращает, тогда как если бы я использовал Active Directory Explorer, когда я добавляю

objectGuid со значением f8d764ff-9a6a-418e-a641-b6f99661a8d5, его условие поиска становится следующим: (objectGUID = \ FFd \ D7 \ F8j \ 9A \ 8EA \ A6A \ B6 \ F9 \ 96a \ A8 \ D5 *)

Как мне сделать это для directorySearcher в моей программе, я предполагаю, что это строка октетов, но я не могу этого понять.


person Matt    schedule 09.10.2009    source источник


Ответы (2)


форумы, сопровождающие отличный Руководство разработчика .NET по программированию служб каталогов (Джо Каплан / Райан Данн) является отличным источником такой информации, как это.

Посмотрите эту ветку под названием Найдите объект с помощью свойства objectGuid, в котором показано, как можно преобразовать "обычный" GUID в формат S.DS "OctetString".

internal string ConvertGuidToOctetString(string objectGuid)
{
   System.Guid guid = new Guid(objectGuid);
   byte[] byteGuid = guid.ToByteArray();

   string queryGuid = "";

   foreach (byte b in byteGuid)
   {
       queryGuid += @"\" + b.ToString("x2");
   }

   return queryGuid; 
}

Это можно немного оптимизировать, используя StringBuilder вместо последовательного объединения строки, но в противном случае это кажется довольно простым.

Надеюсь это поможет.

Марк

person marc_s    schedule 09.10.2009
comment
Вау, на это ушла минута! Я добавлю, что это было необходимо мне, используя библиотеку Novell.Directory.Ldap.NETStandard, чтобы правильно заставить функцию поиска анализировать мой Guid ... ldapConnection.Search("baseDn", LdapConnection.SCOPE_ONE, "objectGUID =" + ConvertGuidToOctetString(objectGUID), attrs, false); - person Evan Morrison; 01.03.2019

Чтобы получить октетную строку, используемую ADExplorer, примените эти шаги к строке GUID:

  • первый регистр GUID:

F8D764FF-9A6A-418E-A641-B6F99661A8D5

  • разделите его на каждом тире на пять частей:

F8D764FF, 9A6A, 418E, A641, B6F99661A8D5

  • разделите каждую часть на байты (по две шестнадцатеричные цифры):

{F8, D7, 64, FF}, {9A, 6A}, {41, 8E}, {A6, 41}, {B6, F9, 96, 61, A8, D5}

  • переверните байты первых трех частей:

{FF, 64, D7, F8}, {6A, 9A}, {8E, 41}, {A6, 41}, {B6, F9, 96, 61, A8, D5}

  • не учитывать деление на части:

FF, 64, D7, F8, 6A, 9A, 8E, 41, A6, 41, B6, F9, 96, 61, A8, D5

  • к каждому байту добавляется обратная косая черта:

\FF, \64, \D7, \F8, \6A, \9A, \8E, \41, \A6, \41, \B6, \F9, \96, \61, \A8, \D5

  • объединить байты:

\FF\64\D7\F8\6A\9A\8E\41\A6\41\B6\F9\96\61\A8\D5

person Michel de Ruiter    schedule 19.08.2014