在AD中搜索objectGUID

Mat*_*att 8 .net directoryservices active-directory

我正在使用Mark Russinovich 的Active Directory Explorer.这是一个很棒的工具.

我正在使用它来导航活动目录,以确保我使用.NET的DirectorySearcher的程序返回正确的数据.

但是当我尝试使用DirectorySearcher在objectGUID中搜索我的程序时,会发生一些事情,如果我将实际的GUID作为字符串传递它不会返回任何内容,就像我使用Active Directory资源管理器一样,当我添加时

objectGuid值为f8d764ff-9a6a-418e-a641-b6f99661a8d5,其搜索子句变为:(objectGUID =\FFd\D7\F8j\9A\8EA\A6A\B6\F9\96a\A8\D5*)

我如何在我的程序中为directorySearcher执行此操作,我猜它是一个八位字符串的东西,但我无法弄明白.

mar*_*c_s 11

论坛伴随着优秀的.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; 
}
Run Code Online (Sandbox Code Playgroud)

这可以通过使用StringBuilder而不是连续地将字符串连接在一起来稍微优化 - 但是看起来相当简单.

希望这可以帮助.


Ily*_*iev 5

...
searcher.PropertiesToLoad.Add("objectGUID");

SearchResultCollection found = found = searcher.FindAll();

foreach (SearchResult result in found)
{
   Guid oGuid = new Guid((byte[])result.Properties["objectGUID"][0]);
}
...
Run Code Online (Sandbox Code Playgroud)