如何为不同部门批量创建AD域账号?
1、文档概述
本文档主要面向系统管理员与运维人员,提供一种在 Active Directory 域控制器中批量创建用户账号的解决方案。该方案支持跨组织单元(OU)创建用户,并可在目标 OU 不存在时自动创建。内容涵盖批量创建脚本的使用方法及相关用户模板的配置步骤,旨在帮助域管理员快速创建域账号,从而提升工作效率。
2、适用范围
- Active Directory域服务器
- 域控运维管理人员
- 批量创建域账号,且自动创建不存在的组织单位(OU)
- 快速、高效、准确
3、需求描述
根据A公司组织架构部署Active Directory域服务的需求,需在新的域控制器上完成以下核心配置:
1)在Active Directory中,按照公司的组织架构创建相应的组织单位(OU);
2)在各组织单位下,为其成员创建对应的域用户账户;
3)为所有新建账户设置统一的初始密码,并强制用户首次登录时更改密码。
4、域账号创建前准备工作
4.1域控服务器
| 系统名称 | IP地址 | 部署链接 |
| DC01(主域控) | 192.168.11.201 | 域控搭建链接 |
| DC02(辅域控) | 192.168.11.202 |
4.2用户账号信息收集
4.2.1创建完域账号的属性信息如图所示
| 字段名 | 说明 | 示例 |
| 姓 | 账号 | yonghulizi |
| 名 | 显示公司名称 | A公司 |
| 显示名称 | 用户名称+部门信息 | 用户例子(信息管理部/软件开发) |
| 描述 | 工号 | 0001 |
| 办公室 | 用户的部门信息 | 信息管理部-软件开发 |
| 电话号码 | 手机号码 | 18920251031 |
| 电子邮件 | 域账号+@+域名 | yonghulizi@cnhope.local |

4.2.2按照如下字段名收集用户信息整理成CSV表格,如下图所示
| 字段名 | 说明 | 示例 |
| Name | 用户的显示名称。 | 江苏0001 |
| FirstName | 代表公司或区域名称。 | 江苏 |
| LastNam | 用户域账号,格式为“名字拼音+编号”。 | jiangsu0001 |
| SamAccountName | 登录用的域账号,格式同 LastName。 | jiangsu0001 |
| DisplayName | 完整显示名称,包含部门信息。 | 江苏0001(东部战区/江苏) |
| Description | 通常用于填写员工工号。 | 0001 |
| Office | 办公室或物理位置名称。 | 东部战区-江苏 |
| PhoneNumber | 用户的手机号码。 | 根据实际情况填写 |
| 电子邮箱地址,格式为“域账号@域名”。 | jiangsu0001@cnhope.local | |
| OUPath | 组织单元路径用于描述用户在 Active Directory 中的层级位置,其格式遵循从叶子节点到根节点的顺序。 | 用户“江苏0001”位于“江苏”组织单元下,该单元归属于“东部战区”,再上层为“China”,最终指向域名。路径示例如下: |

4.3创建域账号的脚本
红色字段是需要根据实际生产进行修改:
l脚本调用用户信息的CSV表的绝对路径下,例如用户表格放置C盘根目录下C:\user.csv
l域名修改为生产域名,例如测试环境域名是cnhope.local
l初始密码自定意义,例如本次测试环境域账号初始密码是P@ssw0rd
|
Import-Module ActiveDirectory
# 初始化计数器 $TotalUsers = 0 $SuccessCount = 0 $FailedCount = 0 $SkippedCount = 0 try { $Users = Import-Csv -Path "C:\user.csv" -ErrorAction Stop $TotalUsers = $Users.Count Write-Host "共计需要创建 $TotalUsers 个账号" -ForegroundColor Yellow } catch { Write-Error "无法读取CSV文件:$_" exit 1 } foreach ($User in $Users) { # 检查必要字段 if ([string]::IsNullOrEmpty($User.SamAccountName)) { Write-Warning "跳过记录:SamAccountName 为空" $SkippedCount++ continue } # 检查OUPath是否为空 if ([string]::IsNullOrEmpty($User.OUPath)) { Write-Warning "用户 $($User.SamAccountName) 未指定OU路径,跳过创建!" $SkippedCount++ continue } $UserCreationSuccessful = $false try { # 拆分并反转OU路径层级 $OUComponents = $User.OUPath.Split(',') | Where-Object { $_ -like "OU=*" } [array]::Reverse($OUComponents) # 提取根域 $DomainComponents = $User.OUPath.Split(',') | Where-Object { $_ -like "DC=*" } $BaseDN = ($DomainComponents -join ',').Trim() # 验证基础DN是否存在 if (-not (Get-ADDomain -Identity $BaseDN -ErrorAction SilentlyContinue)) { throw "基础域路径不存在: $BaseDN" } # 从根域开始逐级创建OU $CurrentPath = $BaseDN foreach ($OU in $OUComponents) { $OUName = $OU.Split('=')[1].Trim() $TargetOU = "OU=$OUName,$CurrentPath" # 检查OU是否存在,不存在则创建 if (-not (Get-ADOrganizationalUnit -Filter "DistinguishedName -eq '$TargetOU'" -ErrorAction SilentlyContinue)) { try { New-ADOrganizationalUnit -Name $OUName -Path $CurrentPath -ProtectedFromAccidentalDeletion $false Write-Host "已创建OU: $TargetOU" -ForegroundColor Cyan } catch { throw "创建OU [$TargetOU] 失败:$_" } } $CurrentPath = $TargetOU } # 在最终路径下创建用户 $newUserParams = @{ SamAccountName = $user.SAMAccountName UserPrincipalName = "$($user.SAMAccountName)@cnhope.local" Name = $user.Name GivenName = $user.FirstName Surname = $user.LastName DisplayName = $user.DisplayName Description = $user.Description Office = $user.Office OfficePhone = $User.PhoneNumber EmailAddress = $user.Email Path = $CurrentPath AccountPassword = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force Enabled = $true ChangePasswordAtLogon = $true ErrorAction = 'Stop' }
# 检查用户是否已存在 if (Get-ADUser -Filter "SamAccountName -eq '$($user.SAMAccountName)'" -ErrorAction SilentlyContinue) { Write-Warning "用户 $($user.SAMAccountName) 已存在,跳过创建" $SkippedCount++ continue } New-ADUser @newUserParams Write-Host "成功创建用户:$($user.SAMAccountName)(路径:$CurrentPath)" -ForegroundColor Green $SuccessCount++ $UserCreationSuccessful = $true } catch { Write-Host "创建用户 $($user.SamAccountName) 失败 - $_" -ForegroundColor Red $FailedCount++ $UserCreationSuccessful = $false } } # 显示统计结果 Write-Host "`n" + "="*50 -ForegroundColor Cyan Write-Host "批量创建用户完成!" -ForegroundColor Cyan Write-Host "共计需要创建: $TotalUsers 个账号" -ForegroundColor White Write-Host "成功创建: $SuccessCount 个账号" -ForegroundColor Green Write-Host "创建失败: $FailedCount 个账号" -ForegroundColor Red Write-Host "跳过创建: $SkippedCount 个账号" -ForegroundColor Yellow Write-Host "="*50 -ForegroundColor Cyan # 验证总数是否匹配 $VerifiedTotal = $SuccessCount + $FailedCount + $SkippedCount if ($TotalUsers -eq $VerifiedTotal) { Write-Host "统计验证通过: $TotalUsers = $SuccessCount(成功) + $FailedCount(失败) + $SkippedCount(跳过)" -ForegroundColor Green } else { Write-Warning "统计验证不匹配: CSV记录数($TotalUsers) ≠ 处理结果($VerifiedTotal)" } |
5、域账号创建过程
将批量创建域账号的PowerShell脚本和用户信息的CSV表格放置域控服务器C盘的根目录下,如图所示:

以管理员身份运行PowerShell,如图所示:

切换到C盘根目录,如图所示:
>cd C:\

执行脚本,如图所示:

脚本执行完毕,显示执行完的结果,如图所示:

6、验证结果
6.1组织单位查看
用户表格组织单位信息,如图所示:

AD域控服务器组织单位效果展示:

6.2用户属性查看
用户表格域账号信息,如图所示:

AD域控服务器域账号属性信息,效果图展示:

域账号首次登陆需要修改密码,效果图展示:

至此,在 Active Directory 域控制器中批量创建用户账号的全流程已介绍完毕。该方案支持跨多个组织单元(OU)进行创建,并包含自动创建缺失 OU 的功能。