PowerShell 批量修改域用户邮箱需用 Import-Csv 读取 CSV 文件(含 SamAccountName 和 Mail 字段),通过 ForEach-Object 调用 Set-ADUser 更新 mail 属性;若同步 Exchange Online,需额外执行 Set-Mailbox 并确保已连接 EXO。

用 PowerShell 批量修改域用户的电子邮件属性,核心是结合 Get-ADUser 查询用户 + Set-ADUser 更新邮箱字段,再通过 CSV 或管道批量执行。关键不是逐个改,而是让脚本自动读取数据、匹配账户、统一写入。
准备 CSV 文件并确认字段结构
先整理好要修改的用户清单,保存为 CSV(如 users.csv),必须包含能唯一标识用户的字段(推荐用 SamAccountName 或 UserPrincipalName),以及目标邮箱地址字段(如 Mail 或 EmailAddress):
- 确保 CSV 第一行是列标题,例如:
"SamAccountName","Mail" - 内容示例:
baiyang001,baiyang001@baiyang.org - 避免空行、中文逗号、BOM 编码;用记事本另存为 UTF-8(无 BOM)最稳妥
执行批量更新命令
运行以下脚本(需以域管理员身份在域控或已装 RSAT 的机器上执行):
Import-Csv .\users.csv | ForEach-Object {
Set-ADUser -Identity $_.SamAccountName -EmailAddress $_.Mail
}
-
-Identity用SamAccountName最可靠;也可换成$_.UserPrincipalName或$_.DistinguishedName -
-EmailAddress修改的是mail属性,即用户在 AD 中的主邮箱地址 - 若还需同步设置
UserPrincipalName(登录名后缀),加参数:-UserPrincipalName $_.UPN
同步更新 Exchange Online 邮箱地址
如果用户已启用 Exchange Online 邮箱,仅改 AD 的 mail 属性不会自动同步到 Exchange。需额外连接 EXO PowerShell 并运行:
Import-Csv .\users.csv | ForEach-Object {
Set-Mailbox -Identity $_.SamAccountName -EmailAddresses "SMTP:$($_.Mail)"
}
-
SMTP:前缀表示主 SMTP 地址(大写),其余地址可用smtp:小写作为别名 - 执行前确保已用
Connect-ExchangeOnline登录,且账号有Organization Management或Recipient Management权限 - 如只需追加别名不覆盖主地址,改用:
-EmailAddresses @{add="smtp:$($_.Mail)"}
验证与常见问题处理
修改后建议快速抽样验证:
- 查单个用户 AD 属性:
Get-ADUser baiyang001 -Properties mail,UserPrincipalName | fl mail,UserPrincipalName - 查 Exchange 邮箱地址:
Get-Mailbox baiyang001 | fl PrimarySmtpAddress,EmailAddresses - 报错“对象不存在”:检查 CSV 中的
SamAccountName是否拼写正确、是否已禁用或被删除 - 报错“拒绝访问”:确认当前 PowerShell 会话是以域管理员身份运行,且对目标 OU 有写权限

















