You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Exchange用户显示名称获取其邮箱地址

解决Exchange通讯组所有者邮箱地址获取问题

你的问题出在对$group.ManagedBy属性的理解上——它返回的并非单纯的显示名称字符串,而是Active Directory对象的引用(包含对象ID、可分辨名称等唯一标识),只是PowerShell默认输出时显示的是Name属性值。直接用显示名称过滤Get-Mailbox容易因为重名、特殊字符或名称匹配偏差导致无结果。

优化后的解决方案

直接利用ManagedBy返回的对象引用,通过Get-Recipient(覆盖Exchange中所有收件人类型:用户、联系人、组等)或Get-Mailbox(仅针对邮箱用户)获取所有者的邮箱地址:

# 获取所有通讯组
$groups = Get-DistributionGroup -ResultSize Unlimited 

# 遍历每个通讯组
foreach ($group in $groups) {
    $groupName = $group.Name
    $groupEmail = $group.PrimarySmtpAddress

    # 获取所有者邮箱地址:直接通过对象引用查询,避免名称匹配问题
    $ownerAddresses = foreach ($owner in $group.ManagedBy) {
        # 使用Get-Recipient兼容更多收件人类型,若确定都是邮箱用户可改用Get-Mailbox
        Get-Recipient -Identity $owner | Select-Object -ExpandProperty PrimarySmtpAddress
    }

    # 获取成员邮箱地址(原逻辑保留)
    $participants = Get-DistributionGroupMember $group | Select-Object -ExpandProperty PrimarySmtpAddress

    # 示例:输出结果,可根据需求调整后续处理
    [PSCustomObject]@{
        "组名称" = $groupName
        "组邮箱" = $groupEmail
        "所有者邮箱" = $ownerAddresses -join ';'
        "成员邮箱" = $participants -join ';'
    } | Export-Csv -Path "通讯组信息.csv" -Append -Encoding UTF8 -NoTypeInformation
}

关键说明

  1. 避免名称匹配陷阱:Get-Recipient -Identity $owner直接利用对象的唯一标识(如可分辨名称、GUID)查询,不会出现重名或显示名称不一致的问题。
  2. 兼容性更强:Get-Recipient支持查询邮箱用户、邮件联系人、通讯组等所有Exchange收件人类型,而Get-Mailbox仅针对拥有邮箱的用户,若通讯组所有者包含外部联系人,前者更适用。
  3. 效率优化:若通讯组数量较多,可考虑批量查询或使用-Filter参数减少重复调用,但上述逻辑已能解决核心问题。

内容的提问来源于stack exchange,提问作者MirrahOH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:13:15