0

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

CN=group.xy.admin.si,OU=Other,OU=Groups,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;
   }
4

1 回答 1

2

这里有两个选项:

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

正则表达式的伪代码:

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

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

于 2013-01-15T22:01:41.337 回答