从CSV更新Active Directory的telephoneNumber字段遇问题求助
修复用CSV更新AD用户电话号码的PowerShell脚本错误
问题根源
你踩了个常见的变量覆盖坑:
- 从CSV导入的
$User是对象类型,自带sAMAccountName和telephoneNumber两个属性 - 但你写了
$User = $User.sAMAccountName,把$User直接改成了字符串(仅账号名),此时再去取$User.telephoneNumber,字符串没有这个属性,结果必然是null——这就是Set-ADUser报错参数为空的核心原因。
另外,用-Add参数不符合你的需求:它是给用户添加新的电话号码(若AD属性允许多值),而你要的是替换更新原有号码,应该用-Replace参数。
修正后的脚本
$Users = Import-Csv -Path C:\Results\EmployeeExtsTest.csv ForEach ($User in $Users) { # 不覆盖原对象,单独提取属性 $samAccount = $User.sAMAccountName # 去除号码前后空格(你的测试数据末尾带空格) $telephoneNumber = $User.telephoneNumber.Trim() # 先检查号码非空,避免无效操作 if ($telephoneNumber) { Get-ADUser -Identity $samAccount | Set-ADUser -Replace @{telephoneNumber = $telephoneNumber} Write-Host "已更新用户 $samAccount 的电话号码: $telephoneNumber" } else { Write-Warning "用户 $samAccount 的电话号码为空,跳过更新" } }
额外优化说明
Trim()处理:避免AD存储带多余空格的无效号码- 非空检查:跳过CSV中空号码的记录,减少错误触发
- 日志输出:直观查看更新进度,方便后续排查
内容的提问来源于stack exchange,提问作者NorwegiaMan
相关产品推荐
相关产品推荐

