2011-08-04 99 views
2

爲什麼會爲什麼GroupPrincipal.FindByIdentity即使在我知道該組存在時也會返回null?

GroupPrincipal group = GroupPrincipal.FindByIdentity(getPrincipalContext(), 
                 "TEST_DESTINATION_GRP"); 

回報null?我知道TEST_DESTINATION_GRP存在於組織單位下。

我的代碼:

private void addUserToGroup(string userName, string groupName) 
{ 
    try 
    { 
     UserPrincipal user = UserPrincipal.FindByIdentity(getPrincipalContext(), IdentityType.SamAccountName, "jcolon"); 
     GroupPrincipal group = GroupPrincipal.FindByIdentity(getPrincipalContext(), "TEST_DESTINATION_GRP"); 
     //just to show that I can access AD    
     ArrayList x = getUserGroups(userName); 

     foreach (var xy in x) 
     { 
      Console.WriteLine(xy); 
     }//I can access AD FINE 

     if (group == null) 
     { Console.WriteLine("Wtf!"); } 
     Console.WriteLine(user); 
     Console.WriteLine(group + "empty why!!!!"); 
    } 
    catch (Exception e) 
    { 
     //log e 
    } 
} 

private PrincipalContext getPrincipalContext() 
{ 
    PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain,sDefaultOU);   
    return oPrincipalContext; 
} 

上述代碼的輸出是:

 
Domain Users 
GRP_ADMIN_SERVER 
GRP_PROG_III 
CTXXA-FlexUser 
CTXXA-Users 
Wtf 
Abanico, [email protected] 
empty why!!!! 

有什麼想法?

回答

5

你的getPrincipalContext方法中的sDomainsDefaultOU的值是多少?

我會嘗試以下操作:

  1. 構造您PrincipalContext沒有任何域或OU的名字 - 在這種情況下,您的默認域和頂級節點將用於:

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 
    

    立即搜索 - 它是否找到您正在尋找的組?

  2. 檢查以確保域和sDefaultOU值是正確的 - 如果將主體上下文連接到一個OU,則無法在另一個OU中進行搜索(除非這是您要連接的OU的子OU) )。

相關問題