从DirectoryEntry中提取组名

时间:2013-01-15 13:26:28

标签: c# active-directory

当我使用下面的代码获取组列表时 我得到一个代表组名的长字符串

  

CN = group.xy.admin.si,OU =其他,OU =组,OU = 03,OU = UWP客户,DC = WIN,DC = CORP,DC = com

但我只是想获得组名称,在这种情况下 group.xy.admin.si

 public static List<string> GetGroups(DirectoryEntry de)
   {
       var memberGroups = de.Properties["memberOf"].Value;

       var groups = new List<string>();

       if (memberGroups != null)
       {
           if (memberGroups is string)
           {
               groups.Add((String)memberGroups);
           }
           else if (memberGroups.GetType().IsArray)
           {
               var memberGroupsEnumerable = memberGroups as IEnumerable;

               if (memberGroupsEnumerable != null)
               {
                   foreach (var groupname in memberGroupsEnumerable)
                   {

                       groups.Add(groupname.ToString());
                   }

               }
           }

       }
       return groups;
   }

1 个答案:

答案 0 :(得分:2)

这里有两个选项:

  • 使用distinguishedName从AD检索组对象,使用其“名称”属性
  • 使用正则表达式提取组名称

正则表达式的伪代码:

string Pattern = @"^CN=(.*?)(?<!\\),.*";
string group = Regex.Replace(groupname.ToString(), Pattern, "$1");
groups.Add(group);

名称可以包含由“\”转义的“,”,因此即使您有名为“Foo,Bar”的组,此正则表达式也可以正常工作