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

如何用PowerShell获取指定人员的直接及间接下属?

解决Azure AD中获取指定用户所有直接/间接下属的问题

你当前的脚本仅处理了两层下属(目标用户的直接下属,以及这些下属的直接下属),要遍历所有层级的下属,需要用迭代队列的方式循环处理,直到没有更多下属为止。下面是修改后的完整脚本:

$name = Read-Host -Prompt "Name: "
$targetUser = Get-AzureADUser -SearchString $name

# 初始化结果集合和待处理队列
$allSubordinates = @()
$processingQueue = New-Object System.Collections.Queue

# 先获取目标用户的直接下属,过滤掉服务账号,加入结果和队列
$directReports = Get-AzureADUserDirectReport -ObjectID $targetUser.ObjectId |
    Where-Object {
        $_.UserPrincipalName -notlike "*svc*" -and
        $_.UserPrincipalName -notlike "SVC*"
    }
$allSubordinates += $directReports
foreach ($report in $directReports) {
    $processingQueue.Enqueue($report)
}

# 循环处理队列中的用户,直到队列为空
while ($processingQueue.Count -gt 0) {
    $currentUser = $processingQueue.Dequeue()
    # 获取当前用户的直接下属
    $subReports = Get-AzureADUserDirectReport -ObjectID $currentUser.ObjectId -ErrorAction Ignore |
        Where-Object {
            $_.UserPrincipalName -notlike "*svc*" -and
            $_.UserPrincipalName -notlike "SVC*"
        }
    # 添加到结果集合
    $allSubordinates += $subReports
    # 将这些下属加入队列,继续处理他们的下属
    foreach ($sub in $subReports) {
        $processingQueue.Enqueue($sub)
    }
}

# 输出所有下属
$allSubordinates

关键逻辑说明

  • 使用System.Collections.Queue跟踪需要处理的用户,确保每一层下属都会被逐层处理
  • 每次从队列中取出一个用户,获取其下属并过滤服务账号后,将结果加入总集合,同时把这些下属放入队列等待后续处理
  • 循环直到队列清空,此时已遍历完所有层级的下属(包括Bob→Eason→George→Harris这类多层级关系)

原脚本失效原因

你之前的脚本仅做了两次遍历:第一次取目标用户的直接下属,第二次取这些下属的直接下属,但没有继续处理George的下属Harris。而队列迭代的方式会持续处理每一个新发现的下属,直到没有更多层级为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:45:48