下面我们对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 %%a@51ctolab.com -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 %%a@51ctolab.com -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 %%a@51ctolab.com -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     –f     demo.csv


说明:


(1)不要试图将这个 文件导回,来验证是否好使。因为这个文件中的好多字段在导入时是不允许用的,如:ObjectGUID、objectSID、pwdLastSet 和 samAccountType 等属性。我们导出这个文件目的只是为了查看相应的字段名是什么,其值应该怎么写,出错信息如下:
(2)可通过-d –r参数指定导出范围和对象类型。例如:


          -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, S1@mcse.com


"CN=s2,OU=test,DC=mcse,DC=com",user,S2,512, S2@mcse.com


………………,其它可用字段,我试了一下,见下表(不全):
6、导入到AD,键入 csvde     –i –f     my.csv     –j 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个用户帐户