如何批量获取所有用户及其所属Microsoft Teams团队信息?
批量获取所有用户及其所属Teams团队的方法
可以通过PowerShell结合Microsoft Graph模块实现批量查询,以下是具体方案:
前置条件
- 已安装Microsoft Graph PowerShell模块:
Install-Module Microsoft.Graph -Force -AllowClobber - 拥有足够权限:需要
User.Read.All和Group.Read.All权限(Teams团队本质是Microsoft 365组,因此需组读取权限)
实现脚本
# 连接Microsoft Graph并申请所需权限 Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All" # 获取所有用户,仅保留需要的核心属性 $allUsers = Get-MgUser -All -Property DisplayName, UserPrincipalName, Id | Select-Object DisplayName, UserPrincipalName, Id # 初始化结果存储数组 $results = @() # 遍历每个用户,获取其所属Teams团队 foreach ($user in $allUsers) { Write-Host "正在处理用户:$($user.DisplayName)" # 获取用户加入的所有Teams团队,仅提取团队显示名称 $teams = Get-MgUserJoinedTeam -UserId $user.Id -All -Property DisplayName | Select-Object DisplayName # 处理无团队的用户 if ($teams.Count -eq 0) { $results += [PSCustomObject]@{ 用户显示名称 = $user.DisplayName 用户邮箱 = $user.UserPrincipalName 团队显示名称 = "无所属团队" } } else { # 为每个团队生成一条关联记录 foreach ($team in $teams) { $results += [PSCustomObject]@{ 用户显示名称 = $user.DisplayName 用户邮箱 = $user.UserPrincipalName 团队显示名称 = $team.DisplayName } } } } # 控制台输出结果 $results | Format-Table -AutoSize # 可选:导出结果到CSV文件(方便后续分析) $results | Export-Csv -Path "用户Teams团队列表.csv" -Encoding UTF8 -NoTypeInformation # 断开与Microsoft Graph的连接 Disconnect-MgGraph
优化说明
- 分页自动处理:通过
-All参数自动适配Graph API的分页限制,确保能获取所有用户及单用户超过200个的团队数据 - 精简属性请求:仅获取必要的用户和团队属性,减少数据传输量,提升查询效率
- 错误扩展处理:可按需添加
try/catch块处理个别用户的查询异常,示例:
foreach ($user in $allUsers) { Write-Host "正在处理用户:$($user.DisplayName)" try { $teams = Get-MgUserJoinedTeam -UserId $user.Id -All -Property DisplayName | Select-Object DisplayName # 原有的记录生成逻辑... } catch { Write-Warning "处理用户$($user.DisplayName)时出错:$_" $results += [PSCustomObject]@{ 用户显示名称 = $user.DisplayName 用户邮箱 = $user.UserPrincipalName 团队显示名称 = "查询失败:$($_.Exception.Message)" } } }
- 大数量场景优化:如果用户规模达数千级,可改用
ForEach-Object -Parallel并行处理,但需添加适当延迟(如Start-Sleep -Milliseconds 500)避免触发Graph API限流机制
内容的提问来源于stack exchange,提问作者Nick Loenders
相关产品推荐
相关产品推荐

