9

Mark RussinovichのActive Directory Explorerを使用しています。それは素晴らしいツールです。

.NET から DirectorySearcher を使用するプログラムが正しいデータを返すことを確認するために、Active Directory をナビゲートするために使用しています。

ただし、DirectorySearcher を使用してプログラム内で objectGUID を検索しようとすると、実際の G​​UID を文字列として渡すと、 Active Directory Explorerを使用するかのように何も返されません。

値が f8d764ff-9a6a-418e-a641-b6f99661a8d5 の objectGuid の場合、その検索句は次のようになります。 (objectGUID=\FFd\D7\F8j\9A\8EA\A6A\B6\F9\96a\A8\D5*)

プログラムで directorySearcher に対してこれを行うにはどうすればよいですか。オクテット文字列だと思いますが、わかりません。

4

3 に答える 3

14

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

「通常の」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 を使用することでわずかに最適化できますが、それ以外の場合はかなり簡単に見えます。

お役に立てれば。

マルク

于 2009-10-09T19:43:03.687 に答える
5
...
searcher.PropertiesToLoad.Add("objectGUID");

SearchResultCollection found = found = searcher.FindAll();

foreach (SearchResult result in found)
{
   Guid oGuid = new Guid((byte[])result.Properties["objectGUID"][0]);
}
...
于 2013-02-11T05:49:08.590 に答える
3

ADExplorer で使用できるオクテット文字列を取得するには、次の手順を GUID 文字列に適用します。

  • 最初に GUID を大文字にします。

F8D764FF-9A6A-418E-A641-B6F99661A8D5

  • 各ダッシュで 5 つの部分に分割します。

F8D764FF, 9A6A, 418E, A641, B6F99661A8D5

  • 各部分をバイトに分割します (それぞれ 2 つの 16 進数):

{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

于 2014-08-19T15:44:18.177 に答える