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

PowerShell从CSV导入用户到Active Directory报Directory Object Not Found错误如何解决

问题根因
  • 首要原因:你CSV中指定的OU路径在Active Directory中不存在。报错的7个用户对应的OU大概率还未创建,或者OU的层级顺序写反了(AD的OU路径规则为子OU在前、父级/域在后,需要和你AD实际结构完全一致)
  • 第二个问题:你的CSV文件没有Password列,脚本中调用$User.Password会取到空值,New-ADUser的-AccountPassword参数要求传入合法的安全字符串,空值会触发报错
  • 第三个问题:属性赋值逻辑错误,你脚本里把$User.Name赋值给了$Firstname,但CSV里已经有单独的GivenName字段存储名字,现有写法会导致Name属性变成Scooby Doo这类重复拼接的情况,和你CSV里的Name列定义冲突。另外原脚本的用户查询条件使用脚本块写法,容易出现变量解析异常。
修复步骤

步骤1:验证所有OU是否存在

运行以下PowerShell命令验证你CSV里的每个OU是否真实存在,替换成你要查询的OU路径即可:

Get-ADOrganizationalUnit -Identity "OU=Board,OU=Management,DC=csc,DC=local"

如果返回找不到对象的错误,说明你需要先在AD中创建对应层级的OU,确保路径完全匹配CSV里Path字段的取值。

步骤2:修改CSV文件新增Password列

在CSV表头末尾加,Password,每行填写对应用户的初始密码,示例如下:

GivenName,Surname,Name,SamAccountName,Path,userPrincipalName,Password
Scooby,Doo,Scooby,Scooby,"OU=Vehicles,OU=Production,DC=csc,DC=local",scooby@csc.local,P@ssw0rd123!
Shaggy,Rogers,Shaggy,Shaggy,"OU=Vehicles,OU=Production,DC=csc,DC=local",shaggy@csc.local,P@ssw0rd123!

步骤3:修正PowerShell脚本

修正后的完整脚本如下,修复了密码转换、属性赋值、查询条件的问题:

# 导入CSV文件
$ADUsers = Import-csv C:\scripts\csc.csv

foreach ($User in $ADUsers)
{
    $Username = $User.SamAccountName
    # 将明文密码转换为AD要求的安全字符串格式
    $Password = ConvertTo-SecureString $User.Password -AsPlainText -Force
    $Firstname = $User.GivenName
    $Lastname = $User.Surname
    $OU = $User.Path
    $UPN = $User.userPrincipalName

    # 检查用户是否已存在
    if (Get-ADUser -Filter "SamAccountName -eq '$Username'" -ErrorAction SilentlyContinue)
    {
        Write-Warning "用户账户 $Username 已存在于Active Directory中"
    }
    else
    {
        New-ADUser `
        -SamAccountName $Username `
        -UserPrincipalName $UPN `
        -Name $User.Name `
        -GivenName $Firstname `
        -Surname $Lastname `
        -Enabled $True `
        -ChangePasswordAtLogon $True `
        -DisplayName "$Lastname, $Firstname" `
        -Path $OU `
        -AccountPassword $Password
    }
}

步骤4:预校验后执行

可先在New-ADUser前添加Write-Output "即将创建用户 $Username,OU路径为 $OU",运行脚本查看输出的信息是否正确,确认无误后删除调试代码再执行正式创建即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:03