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

使用sAMAccountName向AD导入办公电话的PowerShell脚本运行报错如何解决

问题根源

你的代码存在3处变量使用错误,导致传递给Get-ADUser的Identity参数为空,触发报错:

  • 循环迭代变量被覆盖:你定义的循环结构是ForEach($User in $UserList),每次迭代的当前CSV行数据存储在$User变量中,但循环内部你又重新给$User赋值,直接覆盖了原始的CSV行数据
  • 调用了未定义的变量:循环内部使用的$U从未被赋值,$U.SamAccountName和$U.OfficeNumber的取值全部为空
  • 取值逻辑错误:你尝试把$U.SamAccountName赋值给$User后,后续调用$user.SamAccountName相当于去字符串类型的账号值里找SamAccountName属性,必然返回空值

修复后代码

# 导入AD模块
Import-Module ActiveDirectory -ErrorAction Stop

# 导入CSV文件,注意确认CSV分隔符、列名和实际情况一致
$UserList = Import-Csv -Delimiter ';' -Path C:\PhoneNumber.csv

# 遍历CSV每一行
ForEach($Row in $UserList){
    # 读取当前行的字段值
    $SamAccountName = $Row.SamAccountName
    $OfficePhone = $Row.OfficeNumber

    # 过滤空值行,避免无效报错
    if(-not [string]::IsNullOrWhiteSpace($SamAccountName) -and -not [string]::IsNullOrWhiteSpace($OfficePhone)){
        try {
            Get-ADUser -Identity $SamAccountName | Set-ADuser -OfficePhone $OfficePhone -ErrorAction Stop
            Write-Host "用户 $SamAccountName 办公电话更新成功,新号码:$OfficePhone"
        }
        catch {
            Write-Warning "用户 $SamAccountName 更新失败:$_"
        }
    }
    else {
        Write-Warning "当前行存在空值,跳过处理:SamAccountName=$SamAccountName, OfficeNumber=$OfficePhone"
    }
}

注意事项

  • 运行前先打开CSV文件确认列名是否和代码中完全一致,拼写不能出错
  • 确认CSV的分隔符确实是分号,如果你导出CSV用的是逗号分隔,要把-Delimiter ';'改成-Delimiter ','
  • 运行脚本的账号需要拥有AD用户属性的修改权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:15:01