2011-07-20 5 views
6

C#でDirectoryServices.AccouneManagementネームスペースクラスを使用して、特定のアクティブなディレクトリグループのメンバーを取得しようとしています。Active Directoryのクロスドメイン - PrincipalContextを使用するグループメンバー

特定のドメインに対して指定されたプリンシパルコンテキストオブジェクトコンストラクタがある場合、他のドメインのグループからアクセスするたびに、私は以下のエラーに遭遇しています: "照会はサーバ"。

シナリオは次のとおりです。私は、ルートドメインの下に別のサブドメインを持っている 例:emea.mycorp.com、asia.mycorp.com、asiapacific.mycorp.com、xyz.mycorp.com

私が実行している場合asiapacificのグループのxyz.mycorp.comドメインのコードの下にあります。プリンシパルコンテキストオブジェクトにservernameを指定すると、そのグループにアクセスできます。

private PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, "asiapacific domain server name"); 

私のグループは、EMEAの\ ABCDのような他のドメインからのユーザーを持っている場合、下記のコードはのUserPrincipalで失敗:

GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Dev Team"); 
    GroupName = new List<string>(); 
    foreach (UserPrincipal p in SearchGroup.GetMembers())  
    {   
     GroupName.Add(p.SamAccountName + " " + p.DistinguishedName + " " + p.Name); 
    } 

だから、私はルートのためのコンテキストを渡すことができる方法はありますドメインは、ユーザーが所属するドメインに関係なくコードが機能するようになります。私は、下記の試み、運と、それのどれに:これは、ローカルドメインにグローバルカタログサービスを使用してPrincipalContextを作成します

new PrincipalContext(ContextType.Domain, "xyz.mycorp.com:3268", "DC=mycorp,DC=com"); 

private PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, "mycorp.com"); 

または

private PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, "DC=mycorp,DC=com"); 

答えて

13

これを試してみてくださいコントローラ(もちろん、これはローカルDCもGCであると仮定しています)。これにより、フォレスト全体の検索が可能になります。

+0

THX u make my day !!!!! – GermanSniper

+0

これは機能します!ありがとう! – Aaron

+0

注:これは、ドメイン間の双方向の信頼関係が存在する場合にのみ機能します。 –

関連する問題