2009-10-09 74 views
8

我正在使用Mark Russinovich的Active Directory Explorer。 這是一個偉大的工具。在AD中搜索objectGUID

我用它來導航活動目錄,以確保我的程序使用.NET中的DirectorySearcher返回正確的數據。

有事不過,當我試圖用我的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執行此操作,我猜測它是一個八位字符串事物,但我無法弄清楚。

回答

10

伴隨優秀The .NET Developer's Guide to Directory Services Programming(Joe Kaplan/Ryan Dunn)的forums是此類信息的絕佳來源。

看看這個標題爲Find the object using objectGuid property的線程,它顯示瞭如何將「常規」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的,而不是連續地串聯起來的字符串稍微優化 - 但它似乎相當簡單,否則。

希望這會有所幫助。

馬克

+0

巨大的資源的確,謝謝! – Matt 2009-10-09 19:47:10

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

SearchResultCollection found = found = searcher.FindAll(); 

foreach (SearchResult result in found) 
{ 
    Guid oGuid = new Guid((byte[])result.Properties["objectGUID"][0]); 
} 
... 
1

爲了得到八位字節串由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