【问题标题】:How to enumerate groups for a user in a multidomain environment如何在多域环境中为用户枚举组
【发布时间】:2012-07-02 08:40:16
【问题描述】:

假设您的组织中有一个包含两个域的林。在我的例子中,每个域都定义在一个服务器中,所以我有两个域控制器。

DOMAIN1
  group1
  user1
DOMAIN2
  group2
  user2

group1 members: user1, user2
group2 members: user1, user2

有没有办法从域 DOMAIN2 中的计算机列出 user1 所属的组?使用 C# 或 WinAPI 对我有效。


编辑: WinAPI 函数 NetUserGetGroups 对我不起作用,因为它在执行将 user1 的组加载到属于域 DOMAIN2 的机器时不起作用。

我需要类似于LookupAccountName 的东西来解决跨域问题:

如果无法在本地系统上解析名称,此函数将 尝试使用本地信任的域控制器解析名称 系统。

【问题讨论】:

  • NetUserGetGroups 应该可以工作,您只需将 DOMAIN1 的域控制器指定为目标计算机。您可以使用 NetGetDCName 找到合适的 DC。否则,您可能需要显式查询 Active Directory。有关一些选项,请参阅msdn.microsoft.com/en-us/library/windows/desktop/…。就个人而言,我使用 LDAP API 来完成这类工作的效果很好,尽管只是在单域上下文中。

标签: c# .net windows pinvoke directoryservices


【解决方案1】:

如果您使用的是 .NET 4.0,System.DirectoryServices.AccountManagement 命名空间会有所帮助。 您使用PrincipalContext 创建到域的连接,使用UserPrincipal 获取用户并调用方法GetGroups。我相信您可以为所有必需的域执行此操作,前提是您具有适当的权限。此代码项目article 显示了一些示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多