PowerShell如何将AD用户的经理邮箱写入extensionAttribute扩展属性
问题错误原因
你之前的代码存在几处逻辑错误:
- 变量赋值和管道传参冲突:
$user = "testuser@domain.com"|Set-ADUser这种写法既用管道传值又指定-Identity $user,此时$user还没完成赋值会为空报错 - 没有关联查询到的ManagerEmail值:直接写
ManagerEmail是未定义的变量,无法读取到之前查询得到的经理邮箱值 -Add参数限制:如果目标用户的extensionAttribute13已经存在值,-Add会直接报错,用-Replace兼容性更好
正确实现代码
单用户测试版本
先针对单个测试用户验证逻辑正确性:
# 填写需要测试的目标用户邮箱 $targetUserEmail = "testuser@domain.com" Get-ADUser -Filter "EmailAddress -eq '$targetUserEmail'" -Properties Manager,EmailAddress | ForEach-Object { $managerEmail = $null # 先判断用户是否配置了经理属性,避免空值报错 if ($_.Manager) { $managerEmail = (Get-ADUser -Identity $_.Manager -Properties EmailAddress).EmailAddress } # 写入extensionAttribute13,无经理邮箱时会清空该属性,不需要清空可加if判断跳过 $_ | Set-ADUser -Replace @{extensionAttribute13 = $managerEmail} }
批量全量更新版本
单用户测试通过后可用于批量更新所有启用的AD用户:
Get-ADUser -Filter {Enabled -eq $true} -Properties Manager,EmailAddress | ForEach-Object { $managerEmail = $null if ($_.Manager) { $managerEmail = (Get-ADUser -Identity $_.Manager -Properties EmailAddress).EmailAddress } $_ | Set-ADUser -Replace @{extensionAttribute13 = $managerEmail} }
注意事项
- 执行前请确认运行PowerShell的账号拥有AD用户属性的写入权限
- 请先完成单用户测试验证逻辑符合预期后,再执行批量操作
- 如果不需要覆盖extensionAttribute13的已有值,可以把
-Replace换成-Add,同时在执行前加逻辑判断该属性是否为空
内容的提问来源于stack exchange,提问作者Tony Wright
相关产品推荐
相关产品推荐

