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

PowerShell查询AD用户是否递归归属指定经理的技术问题

判断AD用户是否递归归属指定经理的解决方案

看起来你已经有了Get-ADdirectReports这个递归获取经理下属的函数,现在需要遍历所有AD用户,标记出哪些用户属于这个经理的递归汇报链里。我来帮你完善代码,同时优化一下查询效率:

完整代码实现

# 1. 获取指定经理的所有递归下属(包括下属经理的团队),提取SamAccountName存入哈希表(提升查找速度)
$targetManagerSam = "ManagerName"
$directReports = Get-ADdirectReports -SamAccountName $targetManagerSam | Select-Object -ExpandProperty SamAccountName
$directReportsSet = [System.Collections.Generic.HashSet[string]]$directReports

# 2. 获取所有AD用户,仅加载需要的属性(避免Properties *浪费资源)
$allADUsers = Get-ADUser -Filter * -Properties DisplayName, Manager | Select-Object SamAccountName, DisplayName, Manager

# 3. 遍历每个用户,判断是否属于目标经理的递归下属树
$userStatusResults = foreach ($user in $allADUsers) {
    $isUnderTargetManager = $directReportsSet.Contains($user.SamAccountName)
    # 输出带状态标记的结构化对象
    [PSCustomObject]@{
        SamAccountName      = $user.SamAccountName
        DisplayName         = $user.DisplayName
        IsUnderTargetManager= $isUnderTargetManager
        UserManager         = $user.Manager
    }
}

# 查看完整结果
$userStatusResults | Format-Table -AutoSize
# 或者仅筛选归属该经理的用户
$userStatusResults | Where-Object { $_.IsUnderTargetManager } | Format-Table -AutoSize

关键优化点说明

  • 哈希表存储下属账号:相比普通数组,HashSet的Contains方法查找速度为O(1),当AD用户数量较多时,能大幅提升遍历效率。
  • 避免Properties *:只加载实际需要的属性(如DisplayName、Manager),减少AD查询的负载和内存占用。
  • 结构化输出:通过PSCustomObject返回包含状态标记的结果,方便后续筛选、导出或进一步处理。

补充调整

如果你的Get-ADdirectReports函数会返回经理本人,而你不需要将其标记为归属自己,可以在创建哈希表时过滤掉:

$directReportsSet = [System.Collections.Generic.HashSet[string]]($directReports | Where-Object { $_ -ne $targetManagerSam })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:49