关于用VBS建立域用户与组的问题,请问如何判断组或用户存在呢?

xiaoliang_c 2016-03-02 02:20:47
在网上找了下,有的判断是adodb.conection方法,我的电脑用不了。我写了个VBS通过读文件建立组用户然后将用户添加进组,想以后可以重复使用,就遇到了不知道怎样判断组合用户是否存在的问题,代码如下希望高手解答下,不胜感激!

Option Explicit
Dim objsfs, objou, unou, Userread, Groupread, UserFile, Groupfile, objuser, objgroup
Dim Nametmp(), Accountstmp(), grouptmp()
Dim strTemp, strtotal, i
Dim strou, strdbname, strdbuser, strdbgroup
'group level
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &H2
Const ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP = &H4
Const ADS_GROUP_TYPE_LOCAL_GROUP = &H4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &H8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000
Const passwd = "Pa$$w0rd"

'ou init
unou = "LDAP://OU=it,dc=simple,dc=com"
Set objsfs = CreateObject ("Scripting.FileSystemObject")
Userread = "e:\scripts\User.txt" 'Users file path
Groupread = "e:\scripts\group.txt" 'Group file path
Set UserFile = objsfs.OpenTextFile (Userread, 1)
set GroupFile = objsfs.OpenTextFile (Groupread,1)

'create group
i = 0
Do
strTemp = Split (GroupFile.ReadLine,";")
ReDim Preserve grouptmp (i)
grouptmp(i) = strTemp(0)
creategroup unou, grouptmp(i)
i = i +1
Loop Until GroupFile.AtEndOfStream
GroupFile.close

'Create User Account and Add it to Group
i = 0
Do
strTemp = Split (UserFile.ReadLine,";")
ReDim Preserve Nametmp(i), Accountstmp(i), grouptmp (i)
Nametmp(i)= strTemp(0)
Accountstmp(i)= strTemp(1)
grouptmp(i)= strTemp(2)
strtotal = Array (Nametmp(i), Accountstmp(i), grouptmp(i))
strarray unOU, strtotal(0),strtotal(1),strtotal(2)
i = i+1
Loop Until UserFile.AtEndOfStream
UserFile.Close
wscript.echo "Done"

Sub creategroup (strou, strdbgroup)
Set objou = GetObject (strou)
Set objGroup = objou.Create("Group","CN="&strdbgroup)
objGroup.put "Displayname", strdbgroup
objGroup.put "name", strdbgroup
objGroup.put "sAMAccountName", strdbgroup
objgroup.put "groupType", ADS_GROUP_TYPE_UNIVERSAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
objGroup.SetInfo

End Sub

Function strarray (strou, strdbname, strdbuser, strdbgroup)
Set objou = GetObject (strou)

Set objUser = objou.Create("User","CN="&strdbuser)
objUser.Put "samAccountName",strdbuser
objUser.Put "givenName",strdbname
objUser.Put "sn",strdbname
objUser.Put "DisplayName", strdbname
objUser.Put "userPrincipalName", strdbuser&"@simple.com"
objUser.SetInfo
objuser.SetPassword passwd
objuser.SetInfo
objuser.Put "userAccountControl", "512"
objuser.SetInfo

Set objGroup = objou.GetObject ("Group","CN="&strdbgroup)
objGroup.Add objUser.ADSPath
objGroup.Setinfo
End Function

组文件内容:
HR;
SALE;
IT;

用户文件内容,分别是显示名字,登陆名,和组名
小张;xiaoz;HR;
小王;xiaow;HR;
小明;xiaom;SALE;
张三;zhangs;SALE;
李四;lis;IT;
王五;wangw;IT;
小郭;xiaog;IT;
...全文
1302 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-03-09
  • 打赏
  • 举报
回复
引用 3 楼 vansoft 的回复:
楼上的,看清楚了。不是操作系统的用户和组。 是他自己管理的数据文件。
我眼里刚揉出一粒体积约为一立方毫米的沙子。
舉杯邀明月 2016-03-09
  • 打赏
  • 举报
回复
楼主看看这个命令: net group /domain 是不是能够输出你的域内所有组名称。 如果是的话,可以用管道方式执行,或用输出重定向输出到文本文件中, 然后自己处理这些输出数据。 net 命令好像只能在具有管理员权限的账户下执行。
vansoft 2016-03-09
  • 打赏
  • 举报
回复
楼上的,看清楚了。不是操作系统的用户和组。 是他自己管理的数据文件。
赵4老师 2016-03-03
  • 打赏
  • 举报
回复
C:\>net help user 此命令的语法是: NET USER [username [password | *] [options]] [/DOMAIN] username {password | *} /ADD [options] [/DOMAIN] username [/DELETE] [/DOMAIN] NET USER 用于创建和修改计算机上的用户帐户。当不带选项使用本命令时, 它会列出计算机上的用户帐户。用户帐户的信息存储在用户帐户数据库中。 该命令仅在服务器上运行。 username 指需要进行添加、删除、修改或者浏览的用户帐户的名字。用户帐 户的名字不能超过 20 个字符。 password 分配或改变用户帐户的密码。密码必须满足 NET ACCOUNTS 命令的 /MINPWLEN 选项指定的最小长度的要求。它至多可以具有 14 个字符。 * 提示输入密码。当用户在密码提示符下输入时,密码是不会显示的。 /DOMAIN 在当前域的主域控制器上执行操作。 /ADD 将用户帐户添加到用户帐户数据库中。 /DELETE 从用户帐户数据库中删除用户帐户。 Options 如下所示: Options 描述 -------------------------------------------------------------------- /ACTIVE:{YES | NO} 激活或停用帐户。如果帐户处于停用状态,用户 就不能访问该服务器。该选项的默认值是 YES。 /COMMENT:"text" 提供关于用户帐户的一个描述性注释。需要将文本 括在引号中。 /COUNTRYCODE:nnn 使用操作系统的国家/地区代码来实施用户的帮助 和错误消息的特定语言文件。0 表示默认的国家/地 区代码。 /EXPIRES:{date | NEVER} 如果日期被设置,就会引起帐户过期。设置NEVER, 对帐户就没有时间上的限制。根据国家/地区代码的 不同,有效日期的格式可以是月/日/年或日/月/年。 月可以是一个数字,拼写完整的或三个字母的缩写。 年可以是两位或四位数字。使用斜线(/)(没有空格) 来分隔日期的各个部分。 /FULLNAME:"name" 是一个用户的完整名字(而不是用户名)。需要把名字 用引号括起来。 /HOMEDIR:pathname 设置用户的主目录的路径。路径必须已经存在。 /PASSWORDCHG:{YES | NO} 指定用户是否可以改变自己的密码。其默认值是 YES。 /PASSWORDREQ:{YES | NO} 指定用户的帐户是否必须具有密码。其默认值是 YES。 /PROFILEPATH[:path] 为用户的登录配置文件设置路径。 /SCRIPTPATH:pathname 指用户的登录文件所在的位置。 /TIMES:{times | ALL} 指用户可以登录的时间。TIMES 的表达方式是 day[-day][,day[-day]],time[-time][,time[-time]], 增量限制在 1 小时。天可以是全部拼写或缩写。小时 可以是 12 小时或 24 小时制。对于 12 小时制,可 以使用 AM,PM。ALL 表示用户总是可以登录。空值表 示用户永远不能登录。可以使用逗号分隔天和时间项, 并用分号分隔多个天和时间项。 /USERCOMMENT:"text" 让管理人员添加或改变帐户的用户注释。 /WORKSTATIONS:{computername[,...] | *} 列出至多8个用户可以登录到网络上的计算机。 如果 /WORKSTATIONS 没有列表或列表是 *, 用户就可以从任何一台计算机上登录。 NET HELP command | MORE 用于逐屏显示帮助。
xiaoliang_c 2016-03-02
  • 打赏
  • 举报
回复

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧