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

如何将多值EmailAddresses属性导出到CSV的独立行中

解决方案:拆分多值邮箱地址为单行条目

你的需求完全可行,核心是要遍历每个用户EmailAddresses属性中的每一个地址,而非将其拼接成字符串。以下是修改后的脚本:

# 获取待删除用户列表
$Users = Get-Content "c:\temp\UsersToDelete.txt"

# 初始化空数组存储所有邮箱地址
$allEmails = @()

foreach ($User in $Users) {
    # 获取用户邮箱对象
    $mailbox = Get-Mailbox -Identity $User
    # 遍历每个邮箱地址
    foreach ($email in $mailbox.EmailAddresses) {
        # 过滤并保留SMTP格式的地址(剔除X500等非邮箱条目)
        if ($email -match '^SMTP:|^smtp:') {
            $allEmails += [PSCustomObject]@{
                EmailAddress = $email -replace '^SMTP:|^smtp:', '' # 移除SMTP前缀
            }
        }
    }
}

# 导出为CSV,每行一个邮箱地址
$allEmails | Export-Csv -Path "c:\temp\CollectedEmailAddresses.csv" -NoTypeInformation -Encoding UTF8

关键改动说明:

  • 取消-join ";"拼接逻辑,改为直接遍历EmailAddresses的每一项
  • 新增SMTP地址过滤:EmailAddresses属性会包含X500等非邮箱格式的条目,通过正则匹配只保留真实邮箱地址
  • 使用PSCustomObject统一输出结构,确保CSV为标准单列格式
  • 一次性导出所有数据,比循环-append效率更高(适配900个用户的场景)

可选优化:

  • 若无需区分SMTP前缀大小写,可将匹配逻辑简化为if ($email -match '^smtp:' -i)
  • 如需验证邮箱格式有效性,可额外添加正则匹配:$email -replace '^SMTP:|^smtp:', '' -match '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

内容的提问来源于stack exchange,提问作者CA-Davida1992

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:05:21