如何合并AzureAD命令输出,添加SkuPartNumber与用户经理信息
解决AzureAD用户信息、许可证SKU及经理信息合并输出问题
核心思路
- 预先获取所有AzureAD订阅SKU,构建
SkuId与SkuPartNumber的映射表,避免循环中重复调用接口,提升运行效率 - 直接筛选出已分配许可证的用户集合
- 遍历每个用户,查询其经理信息,并通过映射表匹配对应的许可证SKU编号
- 将所有字段整合后输出为标准化表格
完整PowerShell脚本
# 1. 获取所有订阅SKU并构建映射表 $skuMapping = Get-AzureADSubscribedSku | Select-Object SkuId, SkuPartNumber # 2. 筛选已分配许可证的用户 $licensedUsers = Get-AzureADUser -Filter "AssignedLicenses/$count ne 0" | Select-Object DisplayName, CompanyName, ObjectId, AssignedLicenses # 3. 遍历用户,整合经理信息与SKU编号 $outputData = foreach ($user in $licensedUsers) { # 查询用户经理,处理无经理的情况 $manager = Get-AzureADUserManager -ObjectId $user.ObjectId -ErrorAction SilentlyContinue $managerName = $manager ? $manager.DisplayName : "无经理信息" # 匹配用户所有许可证对应的SKU编号(多许可证用逗号分隔) $skuPartNumbers = $user.AssignedLicenses.SkuId | ForEach-Object { ($skuMapping | Where-Object { $_.SkuId -eq $_ }).SkuPartNumber } -Join ", " # 构建输出对象 [PSCustomObject]@{ 公司名称 = $user.CompanyName 显示名 = $user.DisplayName 许可证SKU编号 = $skuPartNumbers 经理姓名 = $managerName 用户ObjectId = $user.ObjectId } } # 4. 输出格式化表格 $outputData | Format-Table -AutoSize
关键细节说明
- SKU映射表:提前一次性拉取所有SKU数据,后续直接通过
SkuId匹配,避免循环内重复调用Get-AzureADSubscribedSku,减少接口请求次数 - 经理信息兼容:添加错误静默处理,避免无经理的用户抛出异常,用统一文本标记缺失信息
- 多许可证处理:若用户拥有多个许可证,自动将对应的
SkuPartNumber拼接为字符串,保证表格字段的可读性 - 精准筛选用户:通过
Filter参数直接过滤已授权用户,减少不必要的数据加载与处理
内容的提问来源于stack exchange,提问作者Elly
相关产品推荐
相关产品推荐

