c# - ユーザーのADからのオブジェクトGUID

原文 c# active-directory

エンドユーザーのオブジェクトGUIDを見つけるタスクがあります。私はそれを見つけるためにC#を使用しています。このトピックに関するいくつかの記事を読んだ後、DirectoryEntryクラスを使用してADユーザーの詳細を調べました。 ADにクエリを実行した後のSearchResultオブジェクトのデータは、objectguidを提供していますが、これは.net用語ではGUIDではありません。アプリケーションで使用できるように、適切なGUIDに変更する必要がありました。 objectguidからGUIDへの変換についてインターネットを検索したところ、以下に概説する2つの方法が見つかりました。

最初の1つ:

DirectoryEntry de = searchResult.GetDirectoryEntry();
Guid userGuid = new Guid(de.NativeGuid);


二つ目:

Guid userGuid = new Guid((byte[]) searchResult.Properties["objectguid"][0]);


どちらもGUIDを提供していますが、違いがあります。どれを検討すればよいかわかりません。約50000のレコードに対して実行する必要があるため、最初のオプションではかなりの時間がかかりますが、私のシナリオでは受け入れられません。 2番目のオプションはそれほど時間はかかりませんが、この方法で作成されたGUIDが適切かどうかはわかりません。

ここで私の質問は


ADユーザーの2番目のオプションで取得したユーザーGUIDは使用に適していますか?
最初のオプションのGUIDが正しい場合は、(所要時間に関して)より良い方法で見つける方法はありますか?


御時間ありがとうございます。
答え
コメントから、
ケース1の場合、正しいGUIDを取得するより簡単な方法は、Guid userGuid = searchResult.GetDirectoryEntry()。Guid;です。ただし、DirectoryEntryをバインドするために、より多くのADアクセスを生成する場合があるため、2番目の方法が推奨されます。

その2つのエンコーディングの違い(ネイティブと通常)ですが、値は同じです。可能であれば、searchResult.GetDirectoryEntry()メソッドをヒットしないようにしてください。文字通り、ADから完全なレコードを再び取得します。 2つのフィールドだけを必要とする場合は、2つのフィールドを選択してから戻ってすべてを選択する必要はありません。
関連記事

c# - サービス時間を垣間見る方法

c# - log4net翌日の開始時にログファイルを上書きする

c# - ASP.NET MVC(部分的なビュー)を使用して同じページにレビュー製品(http投稿)を追加しようとしています

c# - Model3DCollectionとModel3DGroupの違いは何ですか?

java - 相互互換性のためにC#暗号化をJava(Android)暗号化に変換するヘルプ

c# - Mathos Parser-文字を演算子として使用する

c# - mvc scaffolding rawをデータベースから削除

c# - ASP.NET Webアプリケーションをビルドして起動し、Microsoft CodedUIテストを効率的で時間のかからない方法で実行します

c# - マージフィールドを含むステートメントが機能しない場合のMicrosoft Word

c# - LINQ to SQL。実行時にテーブル名を変更する