Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Active Directory获取组中每个成员的属性列表,如名字、姓氏、电子邮件_C#_Active Directory - Fatal编程技术网

C# 如何从Active Directory获取组中每个成员的属性列表,如名字、姓氏、电子邮件

C# 如何从Active Directory获取组中每个成员的属性列表,如名字、姓氏、电子邮件,c#,active-directory,C#,Active Directory,这里是方法。请看一看这里作为代码注释的部分。我向组名传递字符串[]参数,并查找这些组成员的属性 public List<Users> GetUsers(string[] groupNames) { List<Users> employees = new List<Users>(); string firstName = string.Empty; string lastName = string.

这里是方法。请看一看这里作为代码注释的部分。我向组名传递字符串[]参数,并查找这些组成员的属性

    public List<Users> GetUsers(string[] groupNames)
    {
        List<Users> employees = new List<Users>();
        string firstName = string.Empty;
        string lastName = string.Empty;
        string mail = string.Empty;

        using (var context = new PrincipalContext(ContextType.Domain,     "Name"))
        {
            foreach (var groupName in groupNames)
            {
                foreach (var userPrincipal in   GroupPrincipal.FindByIdentity(context, groupName).GetMembers())
                {
                    //code here please
                    employees.Add(new MPI.Domain.Entities.Users { First = firstName, Email = mail, Last = lastName });
                }
            }
        }
        return employees;
    }
公共列表GetUsers(字符串[]组名)
{
列出员工=新列表();
string firstName=string.Empty;
string lastName=string.Empty;
string mail=string.Empty;
使用(var context=newprincipalcontext(ContextType.Domain,“Name”))
{
foreach(groupName中的var groupName)
{
foreach(GroupPrincipal.FindByIdentity(上下文,groupName.GetMembers())中的var userPrincipal)
{
//请在这里输入密码
添加(新的MPI.Domain.Entities.Users{First=firstName,Email=mail,Last=lastName});
}
}
}
返回员工;
}

您正在调用的
GetMembers
方法将返回该组的所有成员,包括用户和其他组。这是正确的,因为在active directory中,组可以有组成员

要仅获取用户,必须筛选成员。一种方法是使用如下所示的:

foreach (var userPrincipal in 
    GroupPrincipal
        .FindByIdentity(context, groupName)
        .GetMembers()
        .OfType<UserPrincipal>())
{
    string mail = userPrincipal.EmailAddress;

    string firstName = userPrincipal.GivenName;

    string lastName = userPrincipal.Surname;

    employees.Add(
        new MPI.Domain.Entities.Users
        {
            First = firstName,
            Email = mail,
            Last = lastName
        });
}
foreach(在
团体负责人
.FindByIdentity(上下文、组名)
.GetMembers()
.OfType())
{
string mail=userPrincipal.EmailAddress;
string firstName=userPrincipal.GivenName;
字符串lastName=userPrincipal.name;
员工。添加(
新的MPI.Domain.Entities.Users
{
First=firstName,
电子邮件,
Last=lastName
});
}
这样,您将只浏览用户成员。循环变量
userPrincipal
的类型也是
userPrincipal
(而不是抽象的
Principal
类)。因此,您可以访问
电子邮件地址
GivenName
姓氏
属性来访问电子邮件、用户名和姓氏

顺便说一下,如果您有兴趣递归地查找组的成员,也就是说,您希望查找作为组成员的组的成员,那么有一种方法允许您这样做