使用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
相关产品推荐
相关产品推荐

