PowerShell脚本导出AzureAD角色与成员信息至CSV的实现问题咨询
问题根因说明
Write-Host仅输出内容到控制台,不会进入PowerShell管道,也无法被赋值给变量,所以你存储的$Export里从来就没有角色名称的内容Format-Table是面向控制台展示的格式化命令,输出的是格式化渲染对象而非原始结构化数据,直接导出CSV/文本都会出现结构混乱的问题
最优实现脚本
# 连接Azure AD Connect-AzureAD # 定义数组存储结构化导出结果 $exportResults = @() # 遍历所有Azure AD目录角色 foreach ($ADRole in Get-AzureADDirectoryRole) { # 可选:保留控制台打印角色名的需求,不影响导出结果 Write-Host $ADRole.DisplayName # 拉取当前角色的所有成员 $roleMembers = Get-AzureADDirectoryRoleMember -ObjectId $ADRole.ObjectId # 处理无成员的角色,保证空角色也出现在结果中满足审计要求 if ($null -eq $roleMembers -or $roleMembers.Count -eq 0) { $exportResults += [PSCustomObject]@{ ADRoleDisplayName = $ADRole.DisplayName MemberDisplayName = $null MemberUserPrincipalName = $null MemberUserType = $null MemberObjectID = $null } continue } # 遍历角色下的每个成员,生成对应结构化记录 foreach ($member in $roleMembers) { $exportResults += [PSCustomObject]@{ ADRoleDisplayName = $ADRole.DisplayName MemberDisplayName = $member.DisplayName MemberUserPrincipalName = $member.UserPrincipalName MemberUserType = $member.UserType MemberObjectID = $member.ObjectId } } } # 导出为CSV,指定编码避免乱码,去掉多余的类型说明行 $exportResults | Export-Csv -Path "C:\Temp\AzureAD角色成员清单.csv" -Encoding UTF8 -NoTypeInformation
效果说明
- 导出的CSV完全匹配你要求的字段结构,每个成员对应一行数据,支持按任意字段筛选
- 未分配用户的空角色会单独保留一行记录,角色名称字段正常展示,其余成员字段留空,符合审计要求
- 导出时指定UTF8编码避免特殊字符/中文乱码,
-NoTypeInformation参数会去除CSV顶部的冗余类型说明
内容的提问来源于stack exchange,提问作者Andrew Waters
相关产品推荐
相关产品推荐

