2009-10-09 34 views
8

私はMark RussinovichのActive Directory Explorerを使用しています。 これは素晴らしいツールです。ADのオブジェクトGUIDを検索する

私はActive Directoryを使用して、.NETのDirectorySearcherを使用するプログラムが正しいデータを返すようにしています。私はActive Directory Explorerを使用するかのように、それは何も返さない文字列として、実際のGUIDを渡した場合、私は

を追加するとき、私は、objectGUIDのためたDirectorySearcherと私のプログラム内で検索しようとすると、

何かが、しかし起こります値f8d764ff-9a6a-418E-a641-b6f99661a8d5と

OBJECTGUIDは、その検索句は次のようになります。 (のobjectGUID = \ FFD \ D7 \ F8j \ 9 \ 8EA \ A6A \ B6 \ F9 \ 96aは\ A8 \ D5 *)

私のプログラムでdirectorySearcherのためにこれを行うにはどうすればいいですか?私はそれがオクテット文字列のものだと推測していますが、それは分かりません。

答えて

10

The .NET Developer's Guide to Directory Services Programming(Joe Kaplan/Ryan Dunn)に付随するforumsは、このような情報の優れた情報源です。

「正規の」GUIDをS.DS「OctetString」形式に変換する方法を示すFind the object using objectGuid propertyという名前のこのスレッドをチェックしてください。

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

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

GUID文字列にこれらのステップを適用し、ADExplorerによって使用可能なオクテット文字列を取得するには:

  • 最初の大文字のGUID:

F8D764FF-9A6A-418E-A641-B6F99661A8D5

  • は、5つの部分に各ダッシュでそれを分割:

F8D764FF, 9A6A, 418E, A641, B6F99661A8D5

  • はバイトに(二進数字ずつ)各部分を分割:

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

  • 最初の3つの部分のバイト:

{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