获取Active Directory组中的所有用户
本文关键字:用户 Active Directory 获取 | 更新日期: 2023-09-27 18:07:18
我正在尝试获取属于Active Directory中某个组的所有用户。我想将结果显示为站点用户选择的下拉菜单。这是我目前所看到的:
public IEnumerable<KeyValuePair<string, string>> GetAllMembers(string group)
{
var domainContext = new PrincipalContext(ContextType.Domain);
var group = GroupPrincipal.FindByIdentity(domainContext, group);
return from principal in @group.Members select new KeyValuePair<string, string>(/* need to fill in key and value */);
}
我的问题是,我正在开发活动目录之外,所以还不能真正测试它(长话短说,不要问)。我想在将其部署到测试环境中时最大化成功的机会。
我的问题是:如果我希望键值对包含登录用户名(key, ex: "DOMAIN'darkoz"
)和用户真实姓名(value, ex: "Darko Z"
),我如何获得这些?Principal
对象至少有5个属性,其中有Name
这个词,所以我不确定哪个是哪个。
解决方案如我所料:
public IEnumerable<KeyValuePair<string, string>> GetAllMembers(string group)
{
var domainContext = new PrincipalContext(ContextType.Domain);
var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, group);
return from m
in groupPrincipal.Members
select new KeyValuePair<string, string>(m.SamAccountName, m.Name);
}
,其中SamAccountName
给出用户登录名,Name
是实际名称
我会阅读之前的类似问题来回答您的两个问题,关于最佳实践以及如何读取accountname和全名:从AD域获取所有用户
无论如何,从微软论坛:
static void Main(string[] args)
{
string groupName = "Domain Users";
string domainName = "";
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName);
GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, groupName);
if (grp != null)
{
foreach (Principal p in grp.GetMembers(false))
{
Console.WriteLine(p.SamAccountName + " - " + p.DisplayName);
}
grp.Dispose();
ctx.Dispose();
Console.ReadLine();
}
else
{
Console.WriteLine("'nWe did not find that group in that domain, perhaps the group resides in a different domain?");
Console.ReadLine();
}
}
source:获取c#中Active Directory用户列表