C# 以字符串[]返回用户所属的所有Active Directory组的列表

C# 以字符串[]返回用户所属的所有Active Directory组的列表,c#,asp.net-mvc-3,asp.net-mvc-4,c#-4.0,active-directory,C#,Asp.net Mvc 3,Asp.net Mvc 4,C# 4.0,Active Directory,我需要以字符串[]返回用户所属的所有Active Directory组,以便在通用主体中使用结果 我不确定是否要投出结果?请帮忙 string[] roles = new string[] { helper.GetActiveDirectoryGroups(User.Identity.Name) }; GenericPrincipal principal = new GenericPrincipal(identity,roles); public string[] GetActiveD

我需要以字符串[]返回用户所属的所有Active Directory组,以便在通用主体中使用结果

我不确定是否要投出结果?请帮忙

string[] roles = new string[] {  
helper.GetActiveDirectoryGroups(User.Identity.Name) };

GenericPrincipal principal = new GenericPrincipal(identity,roles);

 public string[] GetActiveDirectoryGroups(string userName)
    {
          //code here

    }

这应该能奏效

using System.DirectoryServices.AccountManagement;

public static string[] GetGroups(string username)
{
    string[] output = null;

    using (var ctx = new PrincipalContext(ContextType.Domain))
    using (var user = UserPrincipal.FindByIdentity(ctx, username))
    {
        if (user != null)
        {
            output = user.GetGroups() //this returns a collection of principal objects
                .Select(x => x.SamAccountName) // select the name.  you may change this to choose the display name or whatever you want
                .ToArray(); // convert to string array
        }
    }

    return output;
}

如果您希望在用户属于某个组时返回布尔值,请执行以下操作:

 string[] output = null;
            using (var ctx = new PrincipalContext(ContextType.Domain, domain))
            using (var user = UserPrincipal.FindByIdentity(ctx, username))
            {
                if (user != null)
                {
                    output = user.GetGroups()
                        .Select(x => x.SamAccountName)
                        .ToArray();
                }

                bool isMember = output.Any(groupName.Contains);
            }

“如何在Active Directory中获取用户组”的可能重复项很有帮助,但它返回一个数组列表。我需要一个字符串[]来满足我的要求。有什么想法吗???你可以写一个linq查询来从列表中获取广告组的名称。是的,大卫!正是我想要的。ToArray()将主要对象的集合转换为字符串数组。工作起来很有魅力!除了不递归地检查组之外,这也可以使用。如果要获取所有嵌套组,而不是GetGroups(),请使用GetAuthorizationGroups()