Dar*_*o Z 0 .net c# .net-4.0 c#-4.0 asp.net-mvc-3
我正在尝试获取属于 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 */);
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我正在活动目录之外开发它,所以还不能真正测试它(长话短说,不要问)。当将其部署到测试环境中时,我希望最大限度地提高成功的机会。
我的问题是:如果我希望键值对包含登录用户名(key,ex:)"DOMAIN\darkoz"和用户真实姓名(value,ex:)"Darko Z",我如何获得这些?该Principal对象至少有 5 个属性,Name其中包含该单词,所以我不确定哪个是哪个。
额外问题:这是实现我的目标的普遍接受的方式吗?我意识到这是一个非常简单的问题,但由于我缺乏对 Active Directory 的了解,如果有更好的方法来做到这一点,我不会感到惊讶。这可以在非管理员帐户上运行吗?
解决方案正如我所怀疑的:
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);
}
Run Code Online (Sandbox Code Playgroud)
其中SamAccountName给出用户登录名,Name是实际名称