0

以下のコードを使用してグループのリストを取得すると、グループ名を表す長い文字列が表示されます

CN = group.xy.admin.si、OU = Other、OU = Groups、OU = 03、OU = UWP Customers、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

ここには 2 つのオプションがあります。

  • ADからグループオブジェクトを取得するために取得したdistinguishedNameを使用し、その「name」属性を使用します
  • 正規表現を使用してグループ名を抽出する

正規表現の擬似コード:

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

名前には「\」でエスケープされた「,」を含めることができるため、「Foo、Bar」という名前のグループがある場合でも、この正規表現は正常に機能するはずです。

于 2013-01-15T22:01:41.337 に答える