2011-07-20 53 views
6

我想通過在c#中使用DirectoryServices.AccouneManagement命名空間類來獲取給定的活動目錄組的成員。Active Directory跨域 - 使用PrincipalContext的組成員

如果我有爲特定域指定的主體上下文對象構造函數,那麼無論何時從我從其他域運行的組中訪問該成員時,都會遇到以下錯誤: 「引用從服務器」。

的情況是:我在根域不同的子域 例如:emea.mycorp.com,asia.mycorp.com,asiapacific.mycorp.com,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); 
    } 

那麼,有沒有辦法,我可以通過上下文根的方式域,這樣代碼就可以工作,而不管用戶所屬的域。下面我試圖與這一切沒有運氣:

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

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

回答

13

試試這個:

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

這將使用全局目錄服務在本地域中創建PrincipalContext控制器(當然,這也假定你的本地DC也是一個GC)。這將允許搜索整個森林。

+0

THX你讓我的一天!!!!! – GermanSniper

+0

這個工程!謝謝! – Aaron

+0

注意:這也僅適用於域之間存在雙向信任的情況。 –

相關問題