最常用、最可靠的方式是PowerShell脚本配合CSV文件,通过Import-Csv读取含SamAccountName、Surname、GivenName等字段的UTF-8编码CSV,调用New-ADUser创建用户,并支持密码转换、错误处理与日志记录。
在 windows server 域环境中,批量创建用户最常用、最可靠的方式是使用 powershell 脚本配合 csv 文件。相比老旧的 dsadd 或 csvde,powershell(特别是 new-aduser)更灵活、错误处理更强、支持密码策略与日志记录,且是当前主流运维实践。
准备标准化的 CSV 文件
CSV 文件需包含必要字段,建议用 Excel 编辑后另存为 UTF-8 编码的 CSV(避免中文乱码)。关键列名要与脚本中调用的属性一致,常见字段包括:
-
SamAccountName:登录名(必须唯一,如
zhangsan) -
Surname:姓(如
张) -
GivenName:名(如
三) -
Name:显示名称(如
张三,常与 GivenName + Surname 拼接) -
UserPrincipalName:UPN(如
zhangsan@contoso.com) -
Path:目标组织单位 DN(如
OU=IT,OU=Users,DC=contoso,DC=com) - AccountPassword:明文密码(脚本中会转为安全字符串)
- (可选)Department、Title、OfficePhone 等扩展属性
⚠️ 注意:CSV 第一行必须是列标题;Path 对应的 OU 必须已存在(可用 New-ADOrganizationalUnit 预先创建)。
运行 PowerShell 批量创建脚本
以管理员身份打开 PowerShell(非 CMD),确保已安装 RSAT AD 模块(Windows Server 默认含,Windows 10/11 需手动安装)。执行以下命令:
Import-Csv "C:\Users.csv" | ForEach-Object {
New-ADUser `
-SamAccountName $_.SamAccountName `
-Surname $_.Surname `
-GivenName $_.GivenName `
-Name $_.Name `
-UserPrincipalName $_.UserPrincipalName `
-Path $_.Path `
-AccountPassword (ConvertTo-SecureString $_.AccountPassword -AsPlainText -Force) `
-Enabled $true `
-ChangePasswordAtLogon $false `
-PasswordNeverExpires $true `
-Department $_.Department `
-Title $_.Title
}
✅ 成功后无报错即表示用户已创建;若某行失败(如同名用户已存在、OU 不存在、密码不满足策略),PowerShell 会抛出具体错误,便于定位修复。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
增强版脚本推荐:带日志与异常处理
生产环境建议使用封装好的 .ps1 脚本,例如官方社区常见的 Create-BulkUsers.ps1,它具备:
- 自动检查 CSV 是否存在、AD 模块是否加载
- 对每个用户生成随机强密码(满足复杂度要求)
- 记录详细操作日志(成功/失败条目、时间戳、错误原因)
- 支持增量导入(跳过已存在的 SamAccountName)
- 可配置是否启用账户、是否强制首次改密、是否禁用密码过期等
这类脚本可在 Microsoft Script Center 或 GitHub 开源仓库找到,只需修改参数路径即可复用。
替代方案简要对比
若因环境限制无法用 PowerShell,可考虑:
- csvde.exe:仅支持基础属性导入,不设密码、不启用账户(默认禁用),适合纯结构导入后统一启用
- dsadd + for /f:CMD 批处理方式,语法脆弱(空格、逗号、特殊字符易出错),无错误捕获,已逐步淘汰
- ldifde.exe:适合高级场景(如批量修改、删除),但 LDIF 格式编写门槛高,不适合新手
PowerShell 是目前最平衡效率、可控性与维护性的选择。

















