【发布时间】:2010-11-26 10:54:49
【问题描述】:
我正在使用 .Net 库的 System.DirectoryServices.AccountManagement 部分来连接 ActiveDirectory。
在 GroupPrincipal 对象上调用 GetMembers() 并过滤结果后,我现在有了 UserPrincipal 对象的集合
GroupPrincipal myGroup; // population of this object omitted here
foreach (UserPrincipal user in myGroup.GetMembers(false).OfType<UserPrincipal>())
{
Console.WriteLine(user.SamAccountName);
}
上面的代码示例将打印出像“TestUser1”这样的用户名。我需要将这些与来自“DOMAIN\TestUser1”格式的另一个应用程序的列表进行比较。
如何从 UserPrincipal 对象中获取“DOMAIN”部分?
我不能只附加一个已知域名,因为涉及多个域,我需要区分 DOMAIN1\TestUser1 和 DOMAIN2\TestUser2。
【问题讨论】:
-
@marc_s UserPrincipleName 包含 name@fully.qualified.domain.name 格式的名称 - 我看不出如何轻松将其转换为 DOMAIN\user 格式(尤其是涉及的域是已知列表 - 每个生产环境将是与我的开发环境不同的域列表)
-
您也可以使用
msDS-PrincipalName属性,如此处所述stackoverflow.com/questions/10702188 -
或使用
user.Sid.Translate(typeof(System.Security.Principal.NTAccount)).ToString()获取每个组成员的域\用户名。见stackoverflow.com/questions/6759463 -
@GregBray msDs-Principalname 在 Win2003 中对于 AD LDS 系统不存在(请参阅msdn.microsoft.com/en-us/library/cc221208.aspx),并且在 AD DS 上可能包含 NETBIOS 名称(请参阅msdn.microsoft.com/en-us/library/cc223404.aspx) .我不再有权访问我最初遇到此问题的域以进行检查 - 但您的建议可能对那些关注的人有用...
标签: c# .net active-directory userprincipal