最常用且可控的方式是powershell读取csv并调用new-aduser,关键在于csv格式、编码、ou路径和密码处理四点到位:csv需规范表头(如samaccountname、givenname等),保存为utf-8编码;脚本须导入activedirectory模块、校验文件路径、用convertto-securestring转换密码、添加try/catch错误处理及日志,并确保ou真实存在且以管理员权限运行。

直接用 PowerShell 读取 CSV 并调用 New-ADUser 是最常用、最可控的方式。关键不在“能不能”,而在 CSV 格式、编码、OU 路径和密码处理这四点是否到位。
CSV 文件必须规范
表头字段要准确,且顺序不重要(脚本里按列名引用),但以下字段建议包含:
- SamAccountName:登录名,不能重复、不能含空格/特殊字符(如@、/)
- GivenName 和 Surname:名和姓,用于生成全名
- Name 或 DisplayName:用户在 AD 中显示的名称(如“张三”)
-
UserPrincipalName:完整登录邮箱格式,例如
zhangsan@hfkj.cmbchina.cn -
Path:OU 完整路径,必须真实存在,格式如
OU=IT,DC=hfkj,DC=cmbchina,DC=cn - AccountPassword:明文密码,需满足域密码策略(长度≥8,含大小写字母+数字+符号)
保存时务必选 UTF-8 编码(用记事本另存为 → 编码选 UTF-8;Excel 另存为 CSV 时容易默认 ANSI,会导致中文乱码或创建失败)。
PowerShell 脚本要带基础防护
不要直接复制网上“一键运行”脚本。推荐使用带错误捕获和日志记录的版本:
- 先运行
Import-Module ActiveDirectory确保模块已加载 - 用
Test-Path检查 CSV 文件是否存在 - 密码必须用
ConvertTo-SecureString -AsPlainText -Force转换,否则报错 - 加
-ErrorAction SilentlyContinue或try/catch,避免单条出错中断全部导入 - 启用账号、强制首次登录改密:加
-Enabled $true -ChangePasswordAtLogon $true
示例核心逻辑(可直接保存为 CreateUsers.ps1):
$csv = Import-Csv "C:datausers.csv" -Encoding UTF8
foreach ($u in $csv) {
try {
$pw = ConvertTo-SecureString $u.AccountPassword -AsPlainText -Force
New-ADUser -SamAccountName $u.SamAccountName `
-GivenName $u.GivenName `
-Surname $u.Surname `
-Name "$u.GivenName $u.Surname" `
-UserPrincipalName $u.UserPrincipalName `
-Path $u.Path `
-AccountPassword $pw `
-Enabled $true `
-ChangePasswordAtLogon $true
Write-Host "✅ 创建成功: $($u.SamAccountName)"
} catch {
Write-Warning "❌ 创建失败 $($u.SamAccountName): $($_.Exception.Message)"
}
}
OU 路径和域环境要提前验证
脚本不会自动建 OU。运行前务必确认 CSV 中每个 Path 对应的组织单位真实存在:
- 用命令
Get-ADOrganizationalUnit -Filter * | Select Name, DistinguishedName查看所有 OU - 或针对某路径测试:
Get-ADOrganizationalUnit "OU=测试用户,DC=hfkj,DC=cmbchina,DC=cn",不报错才可用 - 如果 OU 不存在,先用
New-ADOrganizationalUnit创建,再跑用户脚本
执行必须用管理员权限 + 正确上下文
不是随便点开 PowerShell 就行:
- 右键“Windows PowerShell(管理员)”,点“以管理员身份运行”
- 确保当前机器是域控,或已安装 RSAT-AD-PowerShell 功能(普通管理机也可远程操作)
- 首次运行可能提示执行策略限制,临时允许:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 脚本文件需放在本地路径(如 C:data),网络路径(\servershare)默认被阻止











