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

使用PowerShell替换AD中proxyAddresses的旧域名

批量替换AD用户ProxyAddresses中的旧域名nby开头邮箱

需求说明

需要批量处理AD用户的ProxyAddresses属性:

  • 移除所有以nby开头、域名为olddomain.com的SMTP别名(格式如smtp:nbyXXXX@olddomain.com)
  • 添加对应的新域名别名(格式如smtp:nbyXXXX@domainA.com)
  • 处理数据来自CSV文件,格式示例:
sAMAccountName,ProxyAddresses
user01,SMTP:user01@domainA.com;smtp:user01@domainA.com;smtp:nby24048@olddomain.com
user02,SMTP:user02@domainA.com;smtp:user02@domainA.com;smtp:nby44048@olddomain.com

完善后的PowerShell脚本

# 导入CSV用户数据
$Users = Import-Csv "c:\temp\users.csv"

# 遍历每个用户
foreach ($User in $Users) {
    $samAccountName = $User.sAMAccountName
    # 解析当前用户的ProxyAddresses,分割为单独的地址列表
    $proxyAddresses = $User.ProxyAddresses -split ';' | Where-Object { $_ -ne '' }

    # 筛选出需要移除的旧nby地址(匹配smtp:nby开头且域名为olddomain.com)
    $oldAddresses = $proxyAddresses | Where-Object { $_ -match '^smtp:nby.*@olddomain\.com$' }

    if ($oldAddresses) {
        # 生成对应的新地址:替换域名部分
        $newAddresses = $oldAddresses | ForEach-Object { $_ -replace '@olddomain\.com', '@domainA.com' }

        # 移除旧地址
        Set-ADUser $samAccountName -Remove @{ proxyAddresses = $oldAddresses }
        Write-Host "已为用户 $samAccountName 移除旧地址:$($oldAddresses -join ', ')"

        # 添加新地址
        Set-ADUser $samAccountName -Add @{ proxyAddresses = $newAddresses }
        Write-Host "已为用户 $samAccountName 添加新地址:$($newAddresses -join ', ')"
    }
    else {
        Write-Host "用户 $samAccountName 没有需要处理的旧nby地址"
    }
}

脚本说明

  • 数据导入:通过Import-Csv读取CSV文件,自动映射列名到对象属性
  • 地址解析:用-split ';'分割ProxyAddresses字符串为单个地址,过滤空值
  • 旧地址筛选:使用正则表达式^smtp:nby.*@olddomain\.com$精准匹配需要移除的地址
  • 新地址生成:通过-replace替换域名部分,确保新地址格式正确
  • AD操作:分别调用Set-ADUser的-Remove和-Add参数处理地址,同时输出操作日志方便排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:25:19