You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows Server 2016中PowerShell批量添加AD用户时名称报错求助

解决PowerShell批量添加AD用户时的名称格式错误问题

嘿,我帮你搞定这个批量加AD用户的问题!你遇到的名称格式错误、空值或需要手动输入名称的问题,大概率是脚本里的几个小疏忽和CSV数据的问题,咱们一步步来修复:

问题根源分析

  1. CSV字段不匹配或空值
    脚本里用$User.Firstname$User.Surname拼接$Name,如果CSV的列名拼写不一致(比如写成FirstName而非Firstname,或者Lastname而非Surname),就会导致变量为空,进而$Name不合法。另外如果CSV里有行的名/姓为空,也会触发AD的名称校验错误。
  2. 密码参数类型错误
    New-ADUser-AccountPassword参数要求传入安全字符串,但你直接传了明文密码,这不仅可能导致错误,还存在安全隐患。
  3. 冗余变量与硬编码重复
    脚本里重复定义了OU路径,还重复赋值密码,既不简洁也容易出错。

修复后的完整脚本

Import-Module ActiveDirectory
# 定义CSV路径和目标OU(复用变量避免硬编码重复)
$file = "C:\Users\Administrator\Documents\UsersHR.csv"
$targetOU = "OU=HR,OU=NTTLab,DC=NTTLab,DC=internal"

# 导入CSV并批量处理用户
$importedUsers = Import-Csv $file
foreach ($user in $importedUsers) {
    # 先校验必填字段,提前过滤无效行
    if ([string]::IsNullOrWhiteSpace($user.Username) -or 
        [string]::IsNullOrWhiteSpace($user.Firstname) -or 
        [string]::IsNullOrWhiteSpace($user.Surname) -or
        [string]::IsNullOrWhiteSpace($user.Password)) {
        Write-Warning "跳过无效行:用户名、名、姓或密码为空,行内容:`n$($user | Out-String)"
        continue
    }

    # 拼接符合AD规范的名称(加空格更符合常规命名)
    $fullName = "$($user.Firstname) $($user.Surname)"
    $samAccountName = $user.Username
    $givenName = $user.Firstname
    $surname = $user.Surname
    $displayName = "$($user.Surname), $($user.Firstname)"
    $company = $user.company
    $department = $user.department

    # 将明文密码转换为AD要求的安全字符串
    $securePassword = ConvertTo-SecureString $user.Password -AsPlainText -Force

    # 捕获错误,避免单个用户失败中断整个批量任务
    try {
        New-ADUser -SamAccountName $samAccountName `
                   -Name $fullName `
                   -GivenName $givenName `
                   -Surname $surname `
                   -Enabled $true `
                   -DisplayName $displayName `
                   -Path $targetOU `
                   -Company $company `
                   -Department $department `
                   -AccountPassword $securePassword `
                   -ChangePasswordAtLogon $true `
                   -ErrorAction Stop
        Write-Host "✅ 成功创建用户:$samAccountName"
    } catch {
        Write-Error "❌ 创建用户$samAccountName失败:$($_.Exception.Message)"
    }
}

关键修复说明

  • 必填字段校验:提前过滤掉用户名、名、姓、密码为空的行,用Write-Warning提示具体问题行,方便你排查CSV数据。
  • 合法名称拼接:把名和姓用空格拼接成$fullName,符合AD默认的命名规范(比如"John Doe"而非"JohnDoe"),避免名称格式不合法。
  • 密码类型转换:用ConvertTo-SecureString将明文密码转为安全字符串,满足AD的参数要求,同时提升安全性。
  • 错误捕获机制:用try/catch包裹创建操作,单个用户创建失败不会中断整个批量任务,还能输出具体错误原因。
  • 代码优化:去掉冗余变量赋值,复用OU路径变量,让代码更简洁易维护。

CSV文件格式要求

确保你的UsersHR.csv列名和脚本里的变量完全匹配(大小写不敏感,但拼写要一致),示例格式如下:

Username,Password,Firstname,Surname,company,department
jdoe,P@ssw0rd1,John,Doe,NTT Corp,HR
asmith,P@ssw0rd2,Amy,Smith,NTT Corp,HR

内容的提问来源于stack exchange,提问作者Ramses Beau Bams

火山引擎 最新活动