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

使用PowerShell提取O365用户代理地址的smtp前缀条目

解决PowerShell提取SMTP前缀代理地址的问题

方法1:拆分字符串后过滤

如果你的代理地址是空格分隔的字符串,先按空格拆分,再筛选以smtp:(支持大小写不敏感)开头的条目:

# 原始代理地址字符串
$proxyAddresses = "smtp:1stline@hatchellwood.onmicrosoft.com smtp:1stline@hatchell.com SMTP:1stline@hatchellwood.com SIP:1stline@hatchellwood.com SPO:SPO_024de2bf-d843-48e0-938d-fb6cfa8dcdbc@SPO_1fef7b7b-eef2-4533-b45e-f7f842c9f6a7"

# 拆分并过滤(不区分大小写,匹配SMTP:和smtp:)
$filteredSmtp = $proxyAddresses -split '\s+' | Where-Object { $_ -match '^smtp:' }

# 如果需要严格匹配小写smtp:,改用大小写敏感的匹配
$filteredSmtpCaseSensitive = $proxyAddresses -split '\s+' | Where-Object { $_ -cmatch '^smtp:' }
  • -split '\s+':处理多个连续空格的情况,将每个代理地址拆分为单独的数组元素
  • -match '^smtp:':正则匹配以smtp:开头的条目,^表示字符串起始位置,-match默认不区分大小写
  • -cmatch:大小写敏感匹配,仅保留小写smtp:开头的条目

方法2:正则直接提取所有匹配项

用正则表达式一次性提取所有符合条件的代理地址,无需拆分字符串:

$proxyAddresses = "smtp:1stline@hatchellwood.onmicrosoft.com smtp:1stline@hatchell.com SMTP:1stline@hatchellwood.com SIP:1stline@hatchellwood.com SPO:SPO_024de2bf-d843-48e0-938d-fb6cfa8dcdbc@SPO_1fef7b7b-eef2-4533-b45e-f7f842c9f6a7"

# 提取所有不区分大小写的smtp:开头的地址
$smtpAddresses = [regex]::Matches($proxyAddresses, '(?i)\bsmtp:[^\s]+') | ForEach-Object { $_.Value }
  • (?i):开启正则的不区分大小写模式
  • \b:单词边界,确保匹配的是完整的smtp:前缀(避免匹配包含smtp的其他字符串)
  • [^\s]+:匹配从smtp:开始到下一个空格前的所有字符,即完整的代理地址

针对O365 cmdlet的优化

如果你是通过Get-EXOMailbox或Get-MsolUser获取用户代理地址,返回的EmailAddresses本身就是数组格式,直接过滤即可:

# 获取Exchange Online用户的代理地址
$userMailbox = Get-EXOMailbox -Identity "1stline@hatchellwood.com"
$userSmtpAddresses = $userMailbox.EmailAddresses | Where-Object { $_ -match '^smtp:' }

这样无需处理字符串拆分,直接对数组元素进行筛选即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:16:03