2011-08-04 61 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) )。

相关问题