云计算运维

Windows Server 2003 - Windows Server 2019 系统工具,Linux系统脚本,Mysql、Nginx、PHP、Redis、K8S、Seafile、Weblogic 、Jenkins、DNS、DHCP、FTP、IIS、Zookeeper、Rabbitmq、Oracle、Tomcat、Mavrn等服务搭建维护,请关注我.

如何为不同部门批量创建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 用户的手机号码。 根据实际情况填写
Email 电子邮箱地址,格式为“域账号@域名”。 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 的功能。

  • 分享: