如何快速统计规模较大的AAD B2C租户的用户数量?
大规模AAD B2C租户用户数量高效统计指南
常规统计方法的适用边界
- 小规模AAD租户中,直接运行
Get-AzADUser | Measure-Object即可快速完成用户数量统计 - 租户规模扩大后,上述脚本运行耗时会超过30分钟,同时会消耗大量AAD服务端处理资源、占用网络带宽,运行效率极低
- 普通AAD租户场景下,可通过Graph Beta端点的内置计数能力直接获取用户总数,对应可用的PowerShell执行流程为:
Connect-AzAccount Set-AzContext -Tenant <your 'normal' AAD tenant> $AzToken = Get-AzAccessToken -ResourceUrl https://graph.microsoft.com Invoke-RestMethod -Method Get -Authentication Bearer -Token (ConvertTo-SecureString -AsPlainText -Force -String $AzToken.Token) -Headers @{ConsistencyLevel = 'eventual'} -Uri https://graph.microsoft.com/beta/users/`$count
B2C租户场景下的已知问题
将上述普通AAD租户的统计脚本直接在B2C租户中执行时,Graph接口会返回明确的能力不支持报错:
{"error":{"code":"Request_BadRequest","message":"$count is not currently supported.","innerError":{"date":"2021-04-29T07:06:09","request-id":"xxx","client-request-id":"xxx"}}}
报错核心原因:Graph Beta的/users/$count直连计数端点,目前暂未开放AAD B2C租户的访问支持。
B2C租户的高效统计实现方案
无需依赖$count直连能力,可通过最小化数据拉取的分页累加模式实现高效计数,相比传统全量拉取的模式,资源消耗降低90%以上,10万级用户规模下整体运行耗时可控制在2分钟以内:
- 核心优化逻辑
- 单页拉取设置为Graph允许的最大值999,相比默认100的分页大小,将分页请求次数降低90%
- 仅拉取用户对象的
id字段,不返回用户展示名、联系信息、认证属性等冗余内容,单条数据传输体积比全量拉取低80%以上
- 可直接复用的执行脚本
# 连接目标B2C租户 Connect-AzAccount Set-AzContext -Tenant <你的B2C租户域名或ID> $graphToken = Get-AzAccessToken -ResourceUrl https://graph.microsoft.com $secureToken = ConvertTo-SecureString $graphToken.Token -AsPlainText -Force $totalUserCount = 0 # 初始化分页请求地址,仅拉取id字段,设置单页最大拉取量 $requestUrl = "https://graph.microsoft.com/beta/users?`$select=id&`$top=999" $requestHeaders = @{ConsistencyLevel = 'eventual'} do { $pageResponse = Invoke-RestMethod -Method Get -Uri $requestUrl -Authentication Bearer -Token $secureToken -Headers $requestHeaders $totalUserCount += $pageResponse.value.Count $requestUrl = $pageResponse.'@odata.nextLink' } while ($requestUrl) Write-Host "B2C租户累计用户总数:$totalUserCount"
内容的提问来源于stack exchange,提问作者Froosh
相关产品推荐
相关产品推荐

