使用AD PowerShell修改AD用户邮件属性时保留次要邮件地址的问题
AD PowerShell修改AD用户邮件属性时保留次要邮件地址的问题
我太懂你的困扰了——直接用-Replace修改proxyAddresses确实会把所有次要邮件地址都清掉,这坑踩过的人都懂!问题出在proxyAddresses是多值属性,-Replace在这里的作用是替换整个属性值集合,而不是只修改其中的某一项。
要解决这个问题,我们得先拿到用户当前的所有邮件地址,替换掉主SMTP地址,同时完整保留其他次要地址,再整体更新回去。具体操作步骤如下:
先获取目标用户的现有属性
先把用户的proxyAddresses和相关属性拉出来,这样能清楚看到当前所有的邮件地址:$user = Get-ADUser -Identity "SamAccountName" -Server domain -Properties proxyAddresses, mail处理邮件地址集合
主SMTP地址是大写SMTP:开头的,次要地址是小写smtp:开头的,我们先过滤掉原来的主地址,再添加新的主地址,同时保留所有次要地址和其他非SMTP类型的地址(比如X500:格式的地址):# 过滤掉原主SMTP地址,保留其他所有地址 $newProxyAddresses = $user.proxyAddresses | Where-Object { $_ -notmatch "^SMTP:" } # 添加新的主SMTP地址 $newProxyAddresses += "SMTP:newsmtp@domain.com"更新用户属性
最后用处理好的地址集合更新用户,同时设置UserPrincipalName和mail属性:Set-ADUser -Identity $user -Server domain ` -UserPrincipalName "newsmtp@domain.com" ` -Replace @{ proxyAddresses = $newProxyAddresses; mail = "newsmtp@domain.com" }
额外提醒
- 确保你运行脚本的账号有修改AD用户属性的权限,不然会触发权限报错
- 建议先在测试环境的用户身上验证这套逻辑,没问题再用到生产环境
- 如果要批量修改多个用户,可以把这段逻辑封装成函数,循环遍历用户列表处理
备注:内容来源于stack exchange,提问作者Ariamteiafmz
相关产品推荐
相关产品推荐

