You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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用户"
    }
}

关键说明

  1. CSV分隔符:必须通过-Delimiter ';'指定分隔符,否则Import-CSV会把整行内容当成单个列,导致$_.mail和$_.telephoneNumber取值为空
  2. 参数对应关系:Set-ADUser的-OfficePhone参数直接映射AD用户的telephoneNumber属性;若习惯直接操作AD属性名,可改用-Replace参数:
    Set-ADUser -Identity $targetUser -Replace @{telephoneNumber = $_.telephoneNumber}
    
  3. 错误处理:添加-ErrorAction SilentlyContinue避免找不到用户时抛出终止错误,通过if ($targetUser)判断用户是否存在,输出明确的调试信息

内容的提问来源于stack exchange,提问作者zouhair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:25:47