如何用PowerShell导出所有动态通讯组成员至CSV文件
批量导出所有动态通讯组成员至CSV文件
问题背景
已知获取单个动态通讯组成员的PowerShell命令:
$lister = Get-DynamicDistributionGroup -Identity "atlanta-members@incose.net" Get-Recipient -RecipientPreviewFilter ($lister.RecipientFilter)
需要编写循环脚本,导出所有动态通讯组的成员信息(包含动态通讯组名称、用户主体名称)到CSV文件,示例输出格式如下:
'memlist', 'hal.jordan@dreamteam.com' 'memlist', 'clark.kent@dreamteam.com' 'otherlist', 'hal.jordan@dreamteam.com' 'otherlist', 'tony.stark@dreamteam.com'
已构思初步框架,但不清楚如何写入CSV:
$dynlists = get-dynamicdistributiongroup ForEach ($dynlist in $dynlists) { # Get Dyn list members $lister = Get-DynamicDistributionGroup -Identity $dynlist | Get-Recipient -RecipientPreviewFilter ($lister.RecipientFilter)}
完整解决方案
以下脚本可直接实现需求,核心是构建规范的自定义对象后统一导出:
# 初始化空数组存储所有结果 $allMemberData = @() # 获取所有动态通讯组 $allDynGroups = Get-DynamicDistributionGroup # 遍历每个动态通讯组 foreach ($group in $allDynGroups) { # 获取当前组的成员列表 $groupMembers = Get-Recipient -RecipientPreviewFilter $group.RecipientFilter # 为每个成员生成包含组名和用户主体名的对象 foreach ($member in $groupMembers) { $memberEntry = [PSCustomObject]@{ 'Group Name' = $group.Name 'User Principal Name' = $member.UserPrincipalName } $allMemberData += $memberEntry } } # 导出到指定路径的CSV文件,可自行修改路径 $allMemberData | Export-Csv -Path "D:\DynamicGroupMembers.csv" -NoTypeInformation -Encoding UTF8
关键说明
- 无需重复调用
Get-DynamicDistributionGroup,$allDynGroups已包含所有组的完整属性,直接使用$group.RecipientFilter即可 - 用
[PSCustomObject]构建统一结构的对象,确保CSV输出格式规范,避免手动拼接字符串导致的格式错误 Export-Csv的-NoTypeInformation参数会移除CSV开头的类型注释,让输出更简洁;-Encoding UTF8保证特殊字符正常显示- 如果需要中文表头,可将
'Group Name'和'User Principal Name'替换为'动态通讯组名称'和'用户主体名称'
内容的提问来源于stack exchange,提问作者BrownInTown
相关产品推荐
相关产品推荐

