VBS脚本批处理创建域用户【可自动设置用户密码,创建OU】[转] http://www.cnblogs.com/ddlzq/archive/2011/08/16/2140207.html '***************************************************************' 批量添加用户的脚本,批量创建和添加到OU,自动创建对应OU。经过实践:' 如果要创建空密码帐户:运行前,先调整“域安全策略”,修改“密码复杂"、"最小长度",' 并gpupdate /force(WIN2K:secedit /refreshpolicy machine_policy /enforce)刷新组策略。''' 使用方法:cscript adduser.vbs NAME.TXT' ========================================================' NAME.TXT的内容格式:' 姓名,带域后缀完整登录名,密码,所在OU,部门信息'' e.g. 郭强龙,guoql@sk.com.cn,skagon,信息安全部,信息安全部' 熊剑,xiongjian@sk.com.cn,password,系统部,系统部' 朱朱,zhuzhu@sk.com.cn,password12,信息安全部,信息安全部' ========================================================' ' skagon 2006-11-17'********************************************************************On Error resume nextIf Wscript.Arguments.Count <> 1 Then Usage()Const ADS_PROPERTY_APPEND = 3set WshShell = WScript.CreateObject("WScript.Shell")Set FSO = CreateObject("Scripting.FileSystemObject")Set NamesFile = FSO.OpenTextFile(Wscript.Arguments(0), 1) '变量Dim FullName'姓名Dim LoginName'登陆名Dim FullLoginName'加域后缀登陆名Dim FirstName'姓Dim LastName'名Dim Password'密码Dim OUname'组织单位名称Dim OfficeName'部门名称,用来看的,和OUname一样即可'常量 '''Set objOU = GetObject("LDAP://CN=Users,dc=sk,dc=com,dc=cn") '''这里"CN=Users",表示直接在域里面缺省的OU:Users创建中创建 ''' '''Set objOU = GetObject("LDAP://dc=sk,dc=com,dc=cn") '''表示直接在域创建中,将和域缺省的几个对象并列,如Builtin,Computer..... ''' '''Set objOU = GetObject("LDAP://OU=mcse,dc=sk,dc=com,dc=cn") '''这里"OU=mcse",表示在自建的OU:mcse里面创建。 DO Until Namesfile.AtEndOfStream Temp = NamesFile.ReadLine'把每一行的名字信息读出来 MyArray = Split(Temp, ",", -1, 1) '得到姓名 FullName = MyArray(0) Select Case Len(FullName)'分离姓名的姓和名(不使用于英文名) Case 2 FirstName = Left(FullName,1) LastName = Right(FullName,1) Case 3 FirstName = Left(FullName,1) LastName = Right(FullName,2) Case 4 FirstName = Left(FullName,2) LastName = Right(FullName,2) Case Else FirstName = Left(FullName,1) LastName = Right(FullName,Len(FullName)-1) End Select '得到登录名 FullLoginName = MyArray(1)'完整登陆名称 LoginName = Left(MyArray(1),Instr(MyArray(1),"@")-1) '得到域名 DomainName = Right(MyArray(1),Len(MyArray(1))-Instr(MyArray(1),"@"))'得到域名 strADsPath = ADsPath( DomainName )'得到 ADsPath ,便于 LDAP查询 '得到密码 Password = MyArray(2) '得到 OU 名 OUname = MyArray(3) '得到办公室名称 OfficeName = MyArray(4) 'Wscript.Echo MyArray(0) &" "& MyArray(1) &" "& MyArray(2) &" "& MyArray(3) &" "& MyArray(4) '这里OU=" & OUname & ",表示在自建的OU里面创建。当没有OU时,执行下面部分(依赖于On Eoor Resume Next) Set objOU2 = GetObject("LDAP://OU=" & OUname & "," & strADsPath) CreateUser(objOU2) Set objOU2 = Nothing '如果没有创建OU,则创建一个OU,再在这个OU里面创建用户。记住,一定要objOU.SetInfo,才能生效 Set objDomain = GetObject("LDAP://" & strADsPath) Set objOU = objDomain.Create("OrganizationalUnit", "ou=" & OUname) objOU.SetInfo CreateUser(objOU) Set objDomain = Nothing Set objOU = Nothing Loop NamesFile.close Function usage() Wscript.Echo "************* Active Direcroty批量用户添加脚本 *************" & vbCrLf Wscript.Echo vbTab & "使用方法:" Wscript.Echo vbTab & " cscript adduser.vbs name.txt" Wscript.Echo vbTab & "name.txt的格式:" Wscript.Echo vbTab & " 郭强龙,guoql@sk.com.cn,skagon,信息安全部,信息安全部" Wscript.Echo vbTab & " 熊剑,xiongjian@sk.com.cn,password,系统部,系统部" Wscript.Echo vbTab & " 朱朱,zhuzhu@sk.com.cn,password12,信息安全部,信息安全部" Wscript.quitEnd Function Function CreateUser(objOU) Set objUser = objOU.Create("user", "cn="& FullName) objUser.Put "sAMAccountName", LoginName objuser.displayName = FullName objuser.userPrincipalName = FullLoginName '''objUser.userAccountControl = 512 '''objuser.AccountDisabled = FALSE'功能同上 objuser.Description = OfficeName objuser.physicalDeliveryOfficeName = OfficeName objuser.sn = FirstName'姓 objuser.givenName = LastName'名字 '''objUser.telephoneNumber '''objUser.EmailAddress '''objUser.Put "pwdLastSet",0 '下次登陆时必须改密码 '''objUser.userWorkstations '下次登陆时必须改密码 objuser.SetInfo objuser.SetPassword Password'这个动作必须在 objuser.SetInfo 之后,因为用户账户必须已经存在于ad中。 Wscript.Echo "帐号: " & FullName &vbTab& " 在OU: " & OUname & " 中创建成功!" Set ojbuser = NothingEnd Function Function ADsPath(strDomainName) '从域名得到ADsPath ,便于 LDAP查询 arrDomLevels = Split(strDomainName, ".") ADsPath = "dc=" & Join(arrDomLevels, ",dc=") 'Wscript.Echo ADsPathEnd Function