使用PowerShell的Get-DistributionGroupMember无法获取通讯组全部成员
解决方法:获取通讯组的全部成员(含非AD个人联系人)
你遇到的问题是因为Get-DistributionGroupMember仅能返回Active Directory/Exchange目录中存在的对象(如域用户、邮件联系人等),而通过Outlook添加的非AD个人联系人是以纯SMTP邮件地址的形式存储在通讯组的ExternalMembers属性中,不会被该cmdlet识别。以下是获取全部成员的步骤:
步骤1:查看通讯组的外部成员属性
使用Get-DistributionGroup命令查询通讯组的ExternalMembers属性,直接获取所有非AD成员的邮件地址:
# 替换为你的通讯组名称或邮件地址 Get-DistributionGroup -Identity "Sales Team" -Properties ExternalMembers | Select-Object Name, PrimarySmtpAddress, ExternalMembers
执行后,ExternalMembers字段会列出所有通过Outlook添加的个人联系人邮件地址。
步骤2:合并AD成员与外部成员
如果需要一次性获取所有成员(AD成员+外部成员),可以结合两个命令的结果:
$groupName = "Sales Team" # 获取AD目录中的成员 $adMembers = Get-DistributionGroupMember -Identity $groupName | Select-Object Name, PrimarySmtpAddress, RecipientType # 获取外部邮件地址成员 $externalMembers = (Get-DistributionGroup -Identity $groupName -Properties ExternalMembers).ExternalMembers | ForEach-Object { [PSCustomObject]@{ Name = $null # 外部成员无目录对象名称,仅保留邮件地址 PrimarySmtpAddress = $_ RecipientType = "External SMTP Member" } } # 合并并输出所有成员 $allMembers = $adMembers + $externalMembers $allMembers | Format-Table -AutoSize
关键说明
- 通讯组的外部成员仅存储为纯SMTP地址,没有对应的AD/Exchange目录对象,因此无法通过
Get-DistributionGroupMember返回。 - Outlook联机界面会同时读取通讯组的常规成员列表和
ExternalMembers属性,因此能显示全部成员。 - 如果是Exchange本地环境,逻辑一致,同样通过
ExternalMembers属性获取外部成员。
内容的提问来源于stack exchange,提问作者Marco P.
相关产品推荐
相关产品推荐

