下面我们对dsadd进行一下说明:
仅从操作过程来看非常简单,但有细节之处。
1、dsadd user 是 Windows Server 2003 才具备的工具。
2、hr.txt 内的原始数据还是需要手工输入的。
3、For语句将读取hr.txt,把每行第一个空格前的内容赋予变量%%a,空格后的内容赋予变量%%b。For语句中tokens的含义是关键。后面一部分则是dsadd user的命令,可以根据自己的需求修改域名和OU名,如果直接创建在默认的Users文件下的话就把OU=test改成CN=Users。
4、我在创建用户时关注的一些选项以及这些选项在dsadd中的对应开关符
(1)用户登录名 (-upn 设置 upn 值为 。)
(2)win2000以前版本的用户登录名 (设置了upn会自动生成)
(3)密码永不过期 (-pwdneverexpires {yes | no} 用户密码是否永远不过期。默认值: no。)
(4)账户永不过期(-acctexpires 设置用户帐户从今天起在天内过期。0 值
意味着今天结束后帐户就过期; 正数值意味着帐户在未
来过期; 负数意味着该帐户已经过期并将过期日期设置
在过去; 字符串值 \"never\" 意味着该帐户永远不过期。)
(5)用户显示名(-display 设置用户显示名为 。)
(6)登录密码 (-pwd {
| *} 设置用户密码为
。如果是 *,会提示您输入密码。)
(7)用户下次登录是否修改密码 (-mustchpwd {yes | no} 用户在下次登录时是否更改密码。默认值: no。)
(8)账户是否禁用(-disabled {yes | no}用户帐户是否禁用。默认值: no。)
附上我add.cmd的源代码与相关说明。
--------------------------------------------
dsadd ou ou=allusers,dc=51ctolab,dc=com (添加组织单元allusers)
dsadd ou ou=hr,ou=allusers,dc=51ctolab,dc=com (在组织单元allusers下添加组织单元hr)
dsadd ou ou=sales,ou=allusers,dc=51ctolab,dc=com (在组织单元allusers下添加组织单元sales)
dsadd ou ou=wenyuan,ou=allusers,dc=51ctolab,dc=com (在组织单元allusers下添加组织单元wenyuan)
--------------------------------------------
For /F "tokens=1,2" %%a in (hr.txt) do dsadd user CN=%%a,OU=hr,OU=allusers,DC=51ctolab,DC=Com -upn %%
[email protected] -display %%b -pwd p@ssw0rd -pwdneverexpires yes (调用hr.txt文档,创建hr用户)
For /F "tokens=1,2" %%a in (sales.txt) do dsadd user CN=%%a,OU=sales,OU=allusers,DC=51ctolab,DC=Com -upn %%
[email protected] -display %%b -pwd p@ssw0rd -pwdneverexpires yes (调用sales.txt文档,创建sales用户)
For /F "tokens=1,2" %%a in (wenyuan.txt) do dsadd user CN=%%a,OU=wenyuan,OU=allusers,DC=51ctolab,DC=Com -upn %%
[email protected] -display %%b -pwd p@ssw0rd -pwdneverexpires yes (调用wenyuan.txt文档,创建wenyuan用户)
作为
网管,有时我们需要批量地向AD域中添加用户帐户,这些用户帐户既有一些相同的属性,又有一些不同属性。如果逐个添加、
设置的话,十分地麻烦。一般来说,如果不超 过10个,我们可利用AD用户帐户复制来实现。如果再多的话,我们就应该考虑使用csvde.
exe或ldifde.exe来减轻我们的工作量了。最后简单介绍一下利用脚本(可利用循环功能)批量创建用户帐号
一、AD用户帐户复制
1、在“AD域和
计算机”中建一个作为样板的用户,如S1。
2、设置相关需要的选项,如所属的用户组、登录时间、用户下次登录时需更改
密码等。
3、在S1上/右键/复制,输入名字和口令。
说明:
1、 只有AD域用户帐户才可以复制,对于本地用户帐户无此功能。
2、 帐户复制可将在样板用户帐户设置的大多数属性带过来。具体如下:
二、比较csvde与ldifde
三、以csvde.exe为例说明:域用户帐户的导出/导入
操作步骤如下:
1、 在“AD域和计算机”中建一个用户,如S1。
2、 设置相关需要的选项,如所属的用户组、登录时间、用户下次登录时需更改密码等。
3、 在DC上,开始/
运行:cmd
4、 键入:csvde �Cf demo.csv
说明:
(1)不要试图将这个
文件导回,来验证是否好使。因为这个文件中的好多字段在导入时是不允许用的,如:ObjectGUID、objectSID、pwdLastSet 和 samAccountType 等属性。我们导出这个文件目的只是为了查看相应的字段名是什么,其值应该怎么写,出错信息如下:
(2)可通过-d �Cr参数指定导出范围和对象类型。例如:
-d “ou=test,dc=mcse,dc=com” 或 -d “cn=users,dc=mcse,dc=com”
-r “< Objectclass=user>”
1、 以上面的文件为参考基础,创建自己的my.csv,并利用复制、粘贴、修改得到多条记录。例如:
dn,objectClass,sAMAccountName,userAccountControl,userPrincipalName
"CN=s1,OU=test,DC=mcse,DC=com",user,S1,512,
[email protected]
"CN=s2,OU=test,DC=mcse,DC=com",user,S2,512,
[email protected]
………………,其它可用字段,我试了一下,见下表(不全):
6、导入到AD,键入 csvde �Ci �Cf my.csv �Cj c:\
说明:-j用于设置日志文件位置,默认为当前路径。此选项可帮助用户在导入不成功时排错。
有一点大家必须明确的是:我们在这里做AD域用户帐户复制、做AD域用户帐户的导出/导入,并不能代替“AD备份和恢复”。我们只是在批量创建用户帐号,帐号的SID都是重新生成的,权利权限都得重新设才行。(当然我们可以把导入的用户,通过memberof字段设到一些用户组中去,使它有权利权限。但这与利用“AD备份和恢复”到原状,完全是两回事)。
四、利用脚本创建批量用户帐户
1、利用脚本创建用户帐号(用户可参考下例)。
Set objDomain = GetObject("LDAP://dc=fabrikam,dc=com")
Set objOU = objDomain.Create("organizationalUnit", "ou=Management")
objOU.SetInfo
说明:在fabrikam.com域创建一个名叫Management的OU。
Set objOU = GetObject("LDAP://OU=Management,dc=fabrikam,dc=com")
Set objUser = objOU.Create("User", "cn= AckermanPila")
objUser.Put "sAMAccountName", "AckermanPila"
objUser.SetInfo
objUser.SetPassword "i5A2sj*!"
objUser.AccountDisabled = FALSE
objUser.SetInfo
说明:在Management OU下创建一个名叫AckermanPila的用户,口令为i5A2sj*!,启用。
Set objOU = GetObject("LDAP://OU=Management,dc=fabrikam,dc=com")
Set objGroup = objOU.Create("Group", "cn=atl-users")
objGroup.Put "sAMAccountName", "atl-users"
objGroup.SetInfo
objGroup.Add objUser.ADSPath
objGroup.SetInfo
说明:在Management OU下创建一个名叫atl-users的用户组,将用户AckermanPila加入到这个组中。
Wscript.echo "Script ended successfully"
说明:显示“脚本成功结束”信息
2、利用脚本中的循环功能实现批量创建用户帐号
Set objRootDSE = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://cn=Users," & _
objRootDSE.Get("defaultNamingContext"))
For i = 1 To 1000
Set objUser = objContainer.Create("User", "cn=UserNo" & i)
objUser.Put "sAMAccountName", "UserNo" & i
objUser.SetInfo
objUser.SetPassword "i5A2sj*!"
objUser.AccountDisabled = FALSE
objUser.SetInfo
Next
WScript.Echo "1000 Users created."
说明:在当前域的Users容器中创建UserNo1到UserNo1000,共1000个用户帐户