PowerShell脚本导入CSV电话号码至Active Directory报错求助
解决PowerShell导入CSV电话号码到Active Directory的问题
问题根源
- 参数名称错误:
Set-ADUser没有-telephoneNumber这个命名参数,AD用户的telephoneNumber属性对应Set-ADUser的-OfficePhone参数,也可通过-Replace直接修改属性 - 语法与逻辑错误:原代码中
$_. telephoneNumber多了空格导致变量解析失败;第二次尝试的代码存在拼写错误($ail_.m应为$_.mail),且逻辑颠倒(用电话号码作为用户标识完全错误) - CSV分隔符未指定:你的CSV用分号
;分隔,但Import-CSV默认用逗号,,不指定分隔符会导致列读取失败
修正后的完整脚本
# 导入ActiveDirectory模块 Import-Module ActiveDirectory # 读取CSV文件,指定分号作为分隔符 Import-CSV -Path "E:\scripts\list.csv" -Delimiter ';' | ForEach-Object { Write-Host "处理记录: 邮箱=$($_.mail),电话号码=$($_.telephoneNumber)" # 根据邮箱精准查找AD用户 $targetUser = Get-ADUser -Filter "mail -eq '$($_.mail)'" -ErrorAction SilentlyContinue if ($targetUser) { # 使用-OfficePhone参数设置电话号码(对应AD的telephoneNumber属性) Set-ADUser -Identity $targetUser -OfficePhone $_.telephoneNumber Write-Host "✅ 成功为用户 $($targetUser.Name) 更新电话号码" } else { Write-Warning "⚠️ 未找到邮箱为 $($_.mail) 的AD用户" } }
关键说明
- CSV分隔符:必须通过
-Delimiter ';'指定分隔符,否则Import-CSV会把整行内容当成单个列,导致$_.mail和$_.telephoneNumber取值为空 - 参数对应关系:
Set-ADUser的-OfficePhone参数直接映射AD用户的telephoneNumber属性;若习惯直接操作AD属性名,可改用-Replace参数:Set-ADUser -Identity $targetUser -Replace @{telephoneNumber = $_.telephoneNumber} - 错误处理:添加
-ErrorAction SilentlyContinue避免找不到用户时抛出终止错误,通过if ($targetUser)判断用户是否存在,输出明确的调试信息
内容的提问来源于stack exchange,提问作者zouhair
相关产品推荐
相关产品推荐

