为什么即使我知道该组存在,GroupPrincipal.FindByIdentity也会返回null?

时间:2011-08-04 22:38:11

标签: c# active-directory

为什么会

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, Elnora@MSH
empty why!!!!

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

sDomain方法中sDefaultOUgetPrincipalContext的值是多少?

我会尝试以下步骤:

  1. 构建没有任何域名或OU名称的PrincipalContext - 在这种情况下,将使用您的默认域及其顶级节点:

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
    

    立即搜索 - 它是否找到了您正在寻找的群组?

  2. 检查以确保域和sDefaultOU值是正确的 - 如果将主要上下文连接到一个OU,则无法在另一个OU中进行搜索(除非那是OU的子OU)你正在连接)。