2017-04-04 9 views
0

次のコードは、ドメイン内のユーザー(「デベロッパー」ではなく「TESTER」など)に適していますが、現在のドメインよりも高いレベルで検索する方法はわかりません。私はPrincipalSearcherクラスとのバリエーションの組み合わせを試しましたが、電子メールアドレスまたはユーザー名による検索で、組織内の他のドメインを1つのフォレストにすべて含めて検索する方法がわかりません。別のドメインのユーザーのUserPrincipalを取得するにはどうすればよいですか?

var name = "DEVELOPER\\JULIANI99"; 
var p = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), name); 
+2

プリンシパルコンテキストオブジェクトの変形を渡してみてください。新しいPrincipalContext(ContextType.Domain、 "domain name here")。私はちょうど提案を試みていない。 – Hakunamatata

+0

これはドメインを知っているときに機能します。ありがとう!私はまだ、SharePointのユーザーフィールドに似たオプションをユーザーに提供したいと考えていますが、これは一時的に行います。 – Dinerdo

答えて

0

FindByIdentityは、フォレストの検索には適していません。

私はこのような何か試してみました:

var d = new PrincipalContext(ContextType.Domain, "domain.com:3268", "DC=com"); 
var p = UserPrincipal.FindByIdentity(d, IdentityType.SamAccountName, username); 

をしかし、私は紹介が返されたというエラーを取得しておきます。それはあなたのために異なるかもしれません。 "3268"ポートは、グローバルカタログ(フォレスト全体の検索)を使用するように指示します。ルート(私は "DC = com"として持っています)は、あなたのフォレスト内のすべてのドメインにわたって共通でなければなりません。したがって、すべてのドメインが "domain.com"のサブドメインである場合は、 "DC = domain、DC = com"と入力することができます。しかし、同じADフォレストの "domain.com"と "otherdomain.com"の部分があれば、それは動作しません。

FindByIdentityもメールアドレスで検索することはできませんので、PrincipalSearcherを使用する方がよい場合があります。あなたは私が得た同じ紹介エラーが発生した場合

、あなたが紹介を追跡するためにそれを伝えることができます。

PrincipalSearcher srch = new PrincipalSearcher(User); 
((DirectorySearcher) srch.GetUnderlyingSearcher()).ReferralChasing = ReferralChasingOption.All; 
+0

はい、先ほどのアプローチを試したときにリフェラルについて返されたのと同じエラーが発生しました。 私はこの方法を試み、あなたに知らせます。 – Dinerdo

+0

紹介の問題を回避するためにこれをどのように使用していますか? User.EmailAddressを設定するとき、またはUserオブジェクトに何かを設定する前にUserオブジェクトをPrincipalSearcherコンストラクタに渡すときでも、エラーが表示されます。 – Dinerdo

+0

ええ、私もそれを得るように見えます。あなたは 'DirectorySearcher'を直接使っているほうが良いでしょう。 'PrincipalSearcher'は"簡単にする "ためのラッパーに過ぎませんが、この場合は不可能になります。 –

関連する問題