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

Exchange邮箱EmailAddresses添加字符串无效,替换正常问题咨询

问题分析与解决

核心问题原因

你第一个命令的无效,是因为错误使用了-join运算符:

  • 在ForEach-Object中,$_代表单个SMTP地址字符串(比如smtp:juan@contoso.com),而-join是用来拼接数组元素的运算符,单个字符串作为仅含一个元素的数组,执行$_ -join '_OLD'不会产生任何变化,自然看不到添加的_OLD后缀。

修正后的命令

如果要给每个SMTP地址添加_OLD后缀,改用字符串拼接方式(+运算符或字符串插值):

Get-Mailbox -ResultSize Unlimited | 
  Select-Object DisplayName, PrimarySmtpAddress, 
    @{Name="EmailAddresses";Expression={
      $_.EmailAddresses | Where-Object {$_ -clike "*smtp*"} | ForEach-Object { $_ + '_OLD' }
    }} | 
  Where-Object { $_.PrimarySmtpAddress -eq "juan@contoso.com" }

如果需要把所有处理后的地址用指定分隔符连成单个字符串(参考第二个命令的输出形式),将-join移到整个表达式末尾:

Get-Mailbox -ResultSize Unlimited | 
  Select-Object DisplayName, PrimarySmtpAddress, 
    @{Name="EmailAddresses";Expression={
      ($_.EmailAddresses | Where-Object {$_ -clike "*smtp*"} | ForEach-Object { $_ + '_OLD' }) -join "OLD"
    }} | 
  Where-Object { $_.PrimarySmtpAddress -eq "juan@contoso.com" }

为什么第二个命令能正常工作

第二个命令中,ForEach-Object内的-replace是对单个字符串做替换操作,之后用-join "OLD"将整个处理后的地址数组拼接成单个字符串,所以能正确输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:30:47