导出AzureAD组所有者到CSV:PowerShell脚本优化需求
Azure AD组所有者CSV导出脚本(解决多所有者分行/批量循环问题)
最终脚本
# 连接Azure AD(首次执行会弹出登录窗口,需使用有权限的账号) Connect-AzureAD # 初始化空数组存储最终结果 $groupOwnerData = @() # 获取所有Azure AD组(如需过滤,可添加-Filter参数,例:-Filter "SecurityEnabled eq true" 仅获取安全组) $allAzureADGroups = Get-AzureADGroup -All $true # 遍历每个组处理所有者信息 foreach ($group in $allAzureADGroups) { # 获取当前组的全部所有者 $groupOwners = Get-AzureADGroupOwner -ObjectId $group.ObjectId -All $true # 将所有者邮箱拼接为逗号分隔的字符串(如需显示名称,替换为$groupOwners.DisplayName) $ownerString = $groupOwners.Mail -join ", " # 构造包含组信息和所有者的自定义对象 $groupRecord = [PSCustomObject]@{ "组名称" = $group.DisplayName "组ObjectID" = $group.ObjectId "所有者列表" = if ($ownerString) { $ownerString } else { "无指定所有者" } } # 将当前组记录加入结果数组 $groupOwnerData += $groupRecord } # 导出到CSV文件(修改路径为你需要的存储位置) $groupOwnerData | Export-Csv -Path "D:\AzureAD_Group_Owners.csv" -Encoding UTF8 -NoTypeInformation
脚本核心逻辑拆解
- 连接Azure AD:通过
Connect-AzureAD完成权限验证,确保能读取组及所有者数据。 - 批量获取组:
Get-AzureADGroup -All $true拉取全量Azure AD组,支持添加过滤参数缩小处理范围。 - 循环处理单组:
- 按组ObjectID精准获取所有者:
Get-AzureADGroupOwner针对当前组提取所有关联所有者。 - 合并多所有者为单行:使用
-join ", "将多个所有者的邮箱(或显示名)合并为单个字符串,彻底解决同一组多行重复的问题。 - 构造结构化数据:用
[PSCustomObject]统一组名、组ID、所有者列表的输出格式,保证每行对应一个组的完整信息。
- 按组ObjectID精准获取所有者:
- 导出CSV:
Export-Csv生成UTF8编码的CSV文件避免乱码,-NoTypeInformation移除PowerShell自带的类型头行,让CSV更适配各类表格工具。
自定义调整建议
- 若需显示所有者姓名而非邮箱,将
$groupOwners.Mail替换为$groupOwners.DisplayName。 - 如需过滤特定类型组,在
Get-AzureADGroup后添加过滤参数,例如仅获取启用邮件的组:-Filter "MailEnabled eq true"。 - 可修改CSV导出路径,确保当前用户拥有该路径的写入权限。
内容的提问来源于stack exchange,提问作者going-cmd-o
相关产品推荐
相关产品推荐

