You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net WinForm获取含嵌套子组的AD安全组成员技术咨询

解决AD嵌套安全组成员遍历的几个方向

嘿,针对你遇到的嵌套安全组成员遍历问题,给你几个实用的方向指引:

  • 利用GetMembers的递归重载
    你当前调用的group.GetMembers()默认只获取直接成员,其实这个方法有个布尔参数recursive,把它设为true就能自动递归遍历所有嵌套子组的成员:

    Dim members As PrincipalSearchResult(Of Principal) = group.GetMembers(True)
    

    这个方法会帮你处理所有层级的嵌套,不用自己写递归逻辑,是最简单直接的方案。

  • 手动递归处理(按需自定义)
    如果需要更灵活的控制(比如在遍历过程中记录组的层级、过滤特定类型的组),可以手动递归:

    1. 遍历当前组的直接成员
    2. 对每个成员判断是否是GroupPrincipal类型
    3. 如果是组,递归调用获取成员的逻辑,将结果合并到总列表中
      这种方式适合需要自定义业务规则的场景,比如只递归特定OU下的子组。
  • 过滤结果(排除组本身)
    不管用哪种方式,最终结果可能会包含子组本身(如果你不需要的话),可以在LINQ查询里加过滤条件,只保留用户类型的主体:

    Dim PersonList = (From m In members 
                      Where TypeOf m Is UserPrincipal  ' 只保留用户
                      Order By m.DisplayName 
                      Select New OaklawnPerson With {
                          .userFullName = m.DisplayName,
                          .userID = m.SamAccountName,
                          .userEmail = m.UserPrincipalName,
                          .userFirstName = m.DisplayName.Split(",").Last()
                      }).ToList
    
  • 权限与异常处理
    遍历嵌套组时可能遇到权限不足的组(比如某些系统保护组),建议在代码中添加异常捕获逻辑,避免程序崩溃,同时可以记录无法访问的组信息以便排查。

内容的提问来源于stack exchange,提问作者Brad Allison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:26:12