如何将PowerShell中Azure AD重复许可证用户及组信息导出到CSV
解决Azure AD重复许可证用户及所属组导出CSV问题
核心思路是将每个用户的所属组列表拼接为逗号分隔的字符串,再通过自定义对象统一结构后导出CSV,完美适配组数量不固定的场景。
完整实现代码
# 连接Azure AD(未连接时执行) Connect-AzureAD # 获取拥有重复许可证的用户(替换为你已实现的重复许可证判断逻辑) $duplicateLicenseUsers = Get-AzureADUser -All $true | Where-Object { # 示例:判断用户分配的许可证数量大于1 $_.AssignedLicenses.Count -gt 1 } # 初始化结果集合 $exportCollection = @() foreach ($user in $duplicateLicenseUsers) { # 获取用户所属的所有安全组/Office 365组 $userGroups = Get-AzureADUserMembership -ObjectId $user.ObjectId | Where-Object {$_.ObjectType -eq "Group"} # 将组名称拼接为逗号分隔的字符串 $groupString = $userGroups.DisplayName -join ", " # 构建导出用的自定义对象 $exportItem = [PSCustomObject]@{ 用户名 = $user.DisplayName 用户主体名 = $user.UserPrincipalName 所属组列表 = $groupString } $exportCollection += $exportItem } # 导出到CSV文件(指定UTF8编码避免中文乱码) $exportCollection | Export-Csv -Path "D:\导出结果\重复许可证用户组信息.csv" -NoTypeInformation -Encoding UTF8
关键细节说明
- 组列表拼接:使用
-join ", "将组名称数组直接转为逗号分隔的字符串,无需关心组数量多少 - 自定义对象:
[PSCustomObject]可以灵活定义导出列,完全适配动态数据结构 - 编码处理:添加
-Encoding UTF8参数,避免CSV文件中的中文出现乱码 - 替换逻辑:把
$duplicateLicenseUsers的赋值部分替换成你已编写的重复许可证用户获取代码即可直接使用
可选优化
如果是大租户环境,Get-AzureADUserMembership循环查询效率较低,可以改用批量查询逻辑,但小量用户场景下上述代码足够高效。
内容的提问来源于stack exchange,提问作者Dr.Drunkards
相关产品推荐
相关产品推荐

