如何使用Get-MgUser获取用户的管理者UPN?
解决Graph PowerShell脚本获取用户管理者UPN无结果的问题
你的脚本存在几个关键问题导致无返回结果:
- 变量拼写错误:定义的是
$mgrUPN,但赋值给NoteProperty时写成了$managerUPN,变量名不匹配导致值为空 - 判断条件错误:
if ($user.Manager)中的$user是初始获取的用户对象,未包含Manager属性,应该检查$mgr.Manager是否存在 - 循环内重复调用API效率低下,可通过一次请求获取所有用户的Manager属性优化
修正后的基础脚本
$allUsers = Get-MgUser -All -Filter "UserType eq 'Member'" foreach ($user in $allUsers) { $mgr = Get-MgUser -UserId $user.Id -ExpandProperty Manager if ($mgr.Manager) { $mgrUPN = $mgr.Manager.AdditionalProperties.userPrincipalName $user | Add-Member -MemberType NoteProperty -Name Manager -Value $mgrUPN -Force } else { $user | Add-Member -MemberType NoteProperty -Name Manager -Value "NULL" -Force } } # 输出包含管理者UPN的用户列表 $allUsers | Select-Object Id, UserPrincipalName, Manager
更高效的优化版本(减少API调用次数)
直接在初始获取用户时展开Manager属性,避免循环内重复请求:
$allUsers = Get-MgUser -All -Filter "UserType eq 'Member'" -ExpandProperty Manager foreach ($user in $allUsers) { $managerUPN = $user.Manager ? $user.Manager.AdditionalProperties.userPrincipalName : "NULL" $user | Add-Member -MemberType NoteProperty -Name Manager -Value $managerUPN -Force } # 输出结果 $allUsers | Select-Object Id, UserPrincipalName, Manager
内容的提问来源于stack exchange,提问作者LaserWhale
相关产品推荐
相关产品推荐

