CSVDE是微软提供的轻量级命令行工具,专用于批量导入导出AD用户等基础对象,但不支持设密码、加组或修改已有对象;适用于全新部署初始化账号、快速落库基础信息等场景。
域用户的批量创建在windows域环境中很常见,csvde(comma-separated values data exchange)是微软提供的轻量级命令行工具,专用于导入导出active directory中的对象,尤其适合一次性创建大量用户。它不支持密码设置和组成员关系等复杂属性,但胜在简单、快速、无需额外环境。
CSVDE的基本原理与适用场景
CSVDE通过读取符合AD Schema结构的CSV文件,将其中的条目映射为AD对象(如user、contact、organizationalUnit)。它只处理基础属性(如sAMAccountName、displayName、givenName、sn、userPrincipalName等),不支持写入密码(pwdLastSet=0也不生效)、不支持修改已有对象、也不能添加用户到组或设置OU以外的位置策略。
适合以下情况:
- 全新部署时初始化数百个测试/培训账号
- 从其他系统导出姓名邮箱等基础信息,需快速落库为AD用户
- 需要导出全部用户列表做审计或比对(用-f参数)
- 环境受限(无PowerShell或RSAT未安装),只能使用原生工具
准备CSV文件的关键格式要求
CSV文件首行为属性头,必须严格匹配AD中实际使用的LDAP显示名(不是友好名称)。常用必填字段包括:
-
dn:完整可分辨名称,例如
"CN=张三,OU=IT,DC=contoso,DC=com"(双引号不能省) -
objectClass:固定填
user - sAMAccountName:登录名(最多20字符,不能重复,不能含特殊符号)
-
userPrincipalName:UPN格式,如
zhangsan@contoso.com - givenName 和 sn:名与姓,用于生成displayName
- displayName:建议显式填写,否则AD可能按规则拼接不一致
注意:所有含空格或逗号的字段必须用英文双引号包裹;整行不能有BOM头;编码保存为UTF-8或GBK(取决于域控制器系统语言,中文域推荐GBK)。
执行导入的命令与常见错误处理
以管理员身份运行CMD,执行:
csvde -i -f users.csv -s dc01.contoso.com -c "DC=contoso,DC=com" "DC=contoso,DC=com"
参数说明:
- -i 表示导入模式
- -f 指定CSV路径
- -s 指定目标域控制器(可选,不加则用当前可用DC)
-
-c 替换DN中的域名占位符(如CSV里写
CN=张三,OU=IT,$domain,则-c后跟真实域名)
典型报错及对策:
- “The directory service has exhausted the pool of relative identifiers”:RID池耗尽 → 检查FSMO角色持有者是否正常,重启Netlogon服务或联系域管理员
- “The syntax of the name is incorrect”:DN格式错误,检查引号、OU路径是否存在、DC拼写是否正确
- “The object already exists”:sAMAccountName重复 → 先用csvde -f export.csv -r "(objectClass=user)"导出现有账号比对
- 导入后用户被禁用且无密码:CSVDE不设密码也不启用账户 → 需后续用PowerShell或ADUC手动启用并重置密码
CSVDE之后的必要补操作
CSVDE创建的用户默认处于禁用状态,且密码为空(无法登录)。必须补充以下动作才能正常使用:
- 启用账户:
dsmod user "CN=张三,OU=IT,DC=contoso,DC=com" -disabled no - 设置初始密码并强制首次登录修改:
dsmod user "CN=张三,OU=IT,DC=contoso,DC=com" -pwd P@ssw0rd123! -mustchpwd yes - 批量启用+设密(推荐PowerShell):
Import-Csv users.csv | ForEach-Object {<br> Enable-ADAccount -Identity $_.sAMAccountName<br> Set-ADAccountPassword -Identity $_.sAMAccountName -NewPassword (ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force) -Reset<br> Set-ADUser -Identity $_.sAMAccountName -ChangePasswordAtLogon $true<br>}
若需分配组权限、设置邮箱、配置漫游配置文件等,CSVDE无法完成,应统一交由PowerShell脚本后续处理。

















