PowerShell脚本无法获取M365组全部用户的问题求助
问题分析
- 分页限制:
Get-AzureADGroupMember默认仅返回100条结果,你的组有105位用户,因此只获取到第一页数据。 - 空值异常未处理:若某用户未设置经理,
Get-AzureADUserManager会返回$null,直接调用$manager.DisplayName会触发报错,导致脚本提前终止。 - 数组拼接性能问题:用
$output += $data的方式拼接数组,数据量较大时会拖慢执行效率,甚至引发意外中断。
修正后的脚本
# 绕过分页限制,获取组内所有成员 $users = Get-AzureADGroupMember -ObjectId 563cf69d-cae5-4630-9705-9345a2ce1259 -All $true # 用管道收集结果,避免数组拼接的性能损耗 $output = foreach ($user in $users) { # 处理经理为空的情况,防止报错 $manager = Get-AzureADUserManager -ObjectId $user.ObjectId -ErrorAction SilentlyContinue $managerName = $manager ? $manager.DisplayName : "无经理" # 直接输出自定义对象,自动被管道收集 [PSCustomObject]@{ Name = $user.DisplayName JobTitle = $user.JobTitle Manager = $managerName Department = $user.Department Mail = $user.Mail Mobile = $user.Mobile Number = $user.TelephoneNumber } } $output | Format-Table $output | Export-Csv -Path 'C:\Users\EverettScott\OneDrive - ClimeCo\Desktop\GroupOrgInfo.csv' -NoTypeInformation
额外优化建议
- 添加错误捕获:若脚本仍存在中断风险,可在循环内加入
try/catch块,记录异常用户信息,避免整体终止:
$output = foreach ($user in $users) { try { $manager = Get-AzureADUserManager -ObjectId $user.ObjectId -ErrorAction Stop $managerName = $manager.DisplayName } catch { Write-Warning "获取用户 $($user.DisplayName) 的经理信息失败:$_" $managerName = "获取失败" } [PSCustomObject]@{ Name = $user.DisplayName JobTitle = $user.JobTitle Manager = $managerName Department = $user.Department Mail = $user.Mail Mobile = $user.Mobile Number = $user.TelephoneNumber } }
- 过滤组内嵌套组:如果目标组包含其他组,可过滤仅保留用户对象:
$users = Get-AzureADGroupMember -ObjectId 563cf69d-cae5-4630-9705-9345a2ce1259 -All $true | Where-Object {$_.ObjectType -eq "User"}
内容的提问来源于stack exchange,提问作者iscottpro
相关产品推荐
相关产品推荐

