如何将多值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
相关产品推荐
相关产品推荐

