gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:22:07 27 4
gpt4 key购买 nike

这是方法。请在此处查看注释为代码的部分。我将组名传递给一个字符串 [] 参数,我正在寻找这些组成员的属性。

    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;
}

最佳答案

您正在调用的 GetMembers 方法将返回组的所有成员,包括用户和其他组。这是真的,因为在事件目录中组可以有组成员。

要仅获取用户,您必须过滤成员。一种方法是使用 OfType LINQ method像这样:

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
});
}

这样,您将只会通过用户成员。并且循环变量 userPrincipal 将是 UserPrincipal 类型(而不是抽象的 Principal 类)。因此,您可以访问 EmailAddressGivenNameSurname 属性来访问用户的电子邮件、名字和姓氏。

顺便说一句,如果你有兴趣递归地找到组的成员,即你想找到组的成员是组的成员,有an overload to the GetMembers。允许您这样做的方法。

关于c# - 如何从 Active Directory 中获取组中每个成员的属性列表,例如名字、姓氏、电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360083/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com