批量创建AD用户并将加入到指定组
转载请注明出处:https://blog.51cto.com/3chou
1、需求分析
现在想要在AD中批量创建用户并加入到指定的组;我们可以对需求进行拆分。
①、创建AD用户(
New-ADUser)
②、将创建用户添加到组(
Add-ADGroupMember)
③、批量实现(
Import-Csv、
ForEach-Object)
2、创建AD用户(“New-ADUser
”)
创建用户使用 “
New-ADUser”cmdlet,下面通过一个例子来讲解此命令的使用。
例如:需要在名称为“test.local”的用的组织单位名称为“OU=suzhou;OU=IT;DC=Test;DC=Local”中创建一个名为张三的用户,需要设置哪些属性呢?
“
New-ADUser”命令主要参数说明:New-ADUser-SamAccountName <张三的登录名>
-Surname <张三的姓>
-GivenName <张三的名>
-Name <张三的姓+名>
-UserPrincipalName <张三的登录名加上域名>
-DisplayName <张三的账号显示名,可以设置和姓名一致>
-Description <张三账号的描述>
-Path <张三账号所在的OU路径>
-AccountPassword (ConvertTo-SecureString -AsPlainText <张三账号的密码> -Force)
-Enabled <账号账号的启用禁用状态,1:启用;0:禁用>
-ChangePasswordAtLogon <张三首次登录账号是否需要更改密码,1:需要;0:不需要>
替换为实际的值后的命令为:
New-ADUser -SamAccountName "zhangs" -Surname "张" -GivenName "三" -Name "张三" -UserPrincipalName "zhangs@test.local" -DisplayName "张三" -Description "张三的描述" -Path "OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL" -AccountPassword (ConvertTo-SecureString -AsPlainText "test@12345" -Force) -Enabled 1 -ChangePasswordAtLogon 1
命令执行结果:
3、为AD组中添加成员(“Add-ADGroupMember
”)
“
Add-ADGroupMember”命令主要参数说明:Add-ADGroupMember[-Identity] <组名>
[-Members] <用户名>
使用”[]“括起来的参数,可以省略。
Add-ADGroupMember testgroup1 "zhangs"
4、读取CSV文件的记录并引用
4.1 读取CSV文件的行和列的属性(“Import-Csv
”)
“
Import-Csv”命令主要参数说明:Import-Csv[-Path] <导入文件的路径>
-Encoding <导入文件所使用的编码,本参数被必需>
-Header <指定备用列标题行,本参数被必需>
Import-Csv .\User-Template.csv
举例说明:
假设有个CSV文件,内容如下图,如何读取它的每一行内容呢?
通过
Import-Csv可以导入CSV文件,导入后的CSV文件的对象类型为数组类型(“
System.Array”),可以通过数组后面加序号取出数组中对应序号的对象,通过“
对象名.属性名”可以引用属性的值。
PS C:\> (Import-Csv .\User-Template.csv).GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array PS C:\> (Import-Csv .\User-Template.csv)[0] Description : c6001 SamAccountName : zhangs1 GivenName : 张 Surname : 三1 Name : 张三1 Path : OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL Group1 : testgroup1 Group2 : testgroup2 Group3 : testgroup3 userPrincipalName : zhangs1@test.local Enabled : 1 AccountPassword : Test@12345 ChangePasswordAtLogon : 1 PS C:\> (Import-Csv .\User-Template.csv)[0].Path OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL
4.2 循环引用可序列对象的值(“ForEach-Object
”)
假设同样有个上节中的CSV文件,文件中的对象可序列化。我们可以通过”
ForEach“和”
$_“来取出当前的属性值。
注: ”
$_“代表的是当前对象。
PS C:\> $temp = Import-Csv .\User-Template.csv PS C:\> $temp[2] Description : c6003 SamAccountName : zhangs3 GivenName : 张 Surname : 三3 Name : 张三3 Path : OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL Group1 : testgroup1 Group2 : testgroup2 Group3 : testgroup3 userPrincipalName : zhangs3@test.local Enabled : 1 AccountPassword : Test@12345 ChangePasswordAtLogon : 1 PS C:\> $temp[2] | foreach {$_.SamAccountName} zhangs3 PS C:\> $temp | foreach {$_.SamAccountName} zhangs1 zhangs2 zhangs3 zhangs4 zhangs5 zhangs6 zhangs7 zhangs8 zhangs9 zhangs10 zhangs11 zhangs12 zhangs13 zhangs14 zhangs15 PS C:\>
命令执行的截图如下:
5、最终文件及脚本
最终的文件分为2部分:模板CSV文件及PowerShell命令或脚本
5.1 模板CSV文件
最终的CSV文件的如下图所示,需要注意的是,如果用中文,CSV文件需要是
utf-8编码。
注: 有些人员并不是 “
Group1”、“
Group2”、“
Group3” 都有值,通过 “
Add-ADGroupMember” 命令会有报错,不过不影响整体的结果。
Description,SamAccountName,GivenName,Surname,Name,Path,Group1,Group2,Group3,userPrincipalName,Enabled,AccountPassword,ChangePasswordAtLogon c6001,zhangs1,张,三1,张三1,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,testgroup3,zhangs1@test.local,1,Test@12345,1 c6002,zhangs2,张,三2,张三2,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,testgroup3,zhangs2@test.local,1,Test@12345,1 c6003,zhangs3,张,三3,张三3,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,testgroup3,zhangs3@test.local,1,Test@12345,1 c6004,zhangs4,张,三4,张三4,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,testgroup3,zhangs4@test.local,1,Test@12345,1 c6005,zhangs5,张,三5,张三5,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,testgroup3,zhangs5@test.local,1,Test@12345,1 c6006,zhangs6,张,三6,张三6,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,,zhangs6@test.local,1,Test@12345,1 c6007,zhangs7,张,三7,张三7,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,,zhangs7@test.local,1,Test@12345,1 c6008,zhangs8,张,三8,张三8,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,,zhangs8@test.local,1,Test@12345,1 c6009,zhangs9,张,三9,张三9,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,testgroup2,,zhangs9@test.local,1,Test@12345,1 c6010,zhangs10,张,三10,张三10,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,,,zhangs10@test.local,1,Test@12345,1 c6011,zhangs11,张,三11,张三11,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,,,zhangs11@test.local,1,Test@12345,1 c6012,zhangs12,张,三12,张三12,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,,,zhangs12@test.local,1,Test@12345,1 c6013,zhangs13,张,三13,张三13,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,,,zhangs13@test.local,1,Test@12345,1 c6014,zhangs14,张,三14,张三14,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,,,zhangs14@test.local,1,Test@12345,1 c6015,zhangs15,张,三15,张三15,"OU=SuZhou,OU=IT,DC=TEST,DC=LOCAL",testgroup1,,,zhangs15@te 8000 st.local,1,Test@12345,1
5.2 PowerShell命令或脚本
最终的PowerShell命令如下:
Import-Csv '.\User-Template.csv' | ForEach-Object {New-ADUser -SamAccountName $.SamAccountName -Surname $.Surname -GivenName $.GivenName -Name $.Name -UserPrincipalName $.UserPrincipalName -DisplayName $.Name -Description $.Description -Path $.Path -AccountPassword (ConvertTo-SecureString -AsPlainText $.AccountPassword -Force) -Enabled 1 -ChangePasswordAtLogon 1 ; Add-ADGroupMember $.group1 -Member $.SamAccountName ; Add-ADGroupMember $.group2 -Member $.SamAccountName ; Add-ADGroupMember $.group3 -Member $_.SamAccountName ;}
注: 一行执行多个 PowerShell 命令,命令间用“
;”分号隔开。
Import-Csv '.\User-Template.csv' | ForEach-Object {New-ADUser -SamAccountName $_.SamAccountName -Surname $_.Surname -GivenName $_.GivenName -Name $_.Name -UserPrincipalName $_.UserPrincipalName -DisplayName $_.Name -Description $_.Description -Path $_.Path -AccountPassword (ConvertTo-SecureString -AsPlainText $_.AccountPassword -Force) -Enabled 1 -ChangePasswordAtLogon 1 ; Add-ADGroupMember $_.group1 -Member $_.SamAccountName ; Add-ADGroupMember $_.group2 -Member $_.SamAccountName ; Add-ADGroupMember $_.group3 -Member $_.SamAccountName ;}
将PowerShell命令保存为“
.ps1”后缀的PowerShell脚本文件,双击即可运行。
如果执行PowerShell脚本出现以下报错,需要执行下“
Set-ExecutionPolicy RemoteSigned -Force”
转载请注明出处:https://blog.51cto.com/3chou
目录:我的Powershell学习笔记
- Windows Server 2003 AD中批量创建用户
- Exchange 2010系列部署报告-批量创建AD用户、组和启用用户邮箱等
- shell脚本批量创建用户,并指定随机密码
- 批量移动AD用户到指定OU 推荐
- 批量创建AD用户
- 在AD中创建用户并将用户加入到AD组中
- Exchange2007通过PowerShell批量创建用户邮箱指定组成员邮箱
- For语句实现批量创建AD用户
- 如何在AD中批量创建域用户
- AD批量创建用户
- Windows Server 2003 AD中批量创建用户
- PowerShell 批量创建AD用户账号
- 批量创建AD用户 推荐
- 批量创建AD域用户
- 如何在AD中批量创建域用户
- Windows Server 2003 AD中批量创建用户
- 使用DSADD来批量创建AD的用户
- 批量创建AD用户
- AD(活动目录)批量创建用户!
- windows server 2012 AD 活动目录部署系列(三)加入域并创建域用户