标题: [问题求助] VBS如何实现获取远程机子里的所有用户和所属组? [打印本页]
作者: 东方月 时间: 2011-7-14 18:45 标题: VBS如何实现获取远程机子里的所有用户和所属组?
本帖最后由 pcl_test 于 2016-8-5 19:50 编辑
VBS怎样实现收集用户信息功能扩展?
以下代码是列出本机所有用户和所属组,格式是:
用户名 : 所属组
现在需要把这个功能扩展成能够远程执行,收集其他服务器的用户信息,请各位高手不吝赐教,推翻重写也行
不是为了干坏事,只是工作需要,本人是新手,这段代码也是网上找到,改成符合自己要求的
谢谢
代码无误,可以直接执行,使用方法:cscript 文件名.vbs
option explicit
Dim wsnetwork,compu,oUser,oGroup
Set wsnetwork=WScript.CreateObject("WScript.Network")
Set compu=GetObject("WinNT://"& wsnetwork.ComputerName)
compu.Filter = Array("User")
For Each oUser In compu
wscript.echo oUser.Name & " : " & GetItsGroup(oUser.Name)
Next
WScript.quit
Function GetItsGroup(sUser)
Set oUser = GetObject("WinNT://./" & sUser & ",user")
For Each oGroup In oUser.Groups
GetItsGroup = GetItsGroup & oGroup.Name & " "
Next
End Function
作者: broly 时间: 2011-7-14 22:05
如果你这段代码可以使用,那么修改点东西就可以远程使用,前提你要有访问和操作那台计算机的权限- option explicit
-
- Dim ComputerName,compu,oUser,oGroup
-
- ComputerName = "此处为那台计算机的名字"
- Set compu=GetObject("WinNT://"& ComputerName)
-
- compu.Filter = Array("User")
-
- For Each oUser In compu
- wscript.echo oUser.Name & " : " & GetItsGroup(oUser.Name)
- Next
- WScript.quit
-
- Function GetItsGroup(sUser)
- Set oUser = GetObject("WinNT://这里填那台机器的IP/" & sUser & ",user")
- For Each oGroup In oUser.Groups
- GetItsGroup = GetItsGroup & oGroup.Name & " "
- Next
- End Function
复制代码
作者: 东方月 时间: 2011-7-15 10:32
谢谢版主,这段代码可以运行,但是运行效率极低,平均15秒显示一个用户,如果碰上用户名多的机器简直无法想象,有没有效率高些的代码??
作者: 东方月 时间: 2011-7-15 10:43
另外,有些机器要求输入用户名密码,这段代码哪里可以插入用户名密码
作者: broly 时间: 2011-7-15 11:45
这样,可以考虑用另外一个控件,不过现在没空先,晚上回去再帮你看看
作者: broly 时间: 2011-7-17 21:24
我写了一个实现了半成方法,不知道会不会比较快,但是支持用户密码。这个缺点是只能列出“用户名+用户组”(没有分开的)和“用户名”,效果自己看:- Dim strComputer,strUsername,strPassword
- Dim colSWbemObjectSet,objSWbemObject,strOut
-
- strComputer = "计算机名"
- strUsername = "用户名" '没有就留空
- strPassword = "密码" '没有就留空
-
- Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
- Set objSWbemServices = objSWbemLocator.ConnectServer _
- (strComputer, "root\cimv2", strUsername, strPassword)
- Set colSWbemObjectSet = objSWbemServices.ExecQuery( _
- "SELECT * FROM Win32_Account",,48)
-
- strOut = "用户名+用户组:" & vbCrLf
- For Each objSWbemObject In colSWbemObjectSet
- strOut = strOut & objSWbemObject.Name & vbCrLf
- Next
-
- WScript.Echo strOut
-
- strOut = "用户组:" & vbCrLf
-
- Set colSWbemObjectSet = objSWbemServices.ExecQuery( _
- "SELECT * FROM Win32_Group",,48)
-
- For Each objSWbemObject In colSWbemObjectSet
- strOut = strOut & objSWbemObject.Name & vbCrLf
- Next
-
- WScript.Echo strOut
-
复制代码
要完全实现可能就得用那个效率不高的方法了
作者: broly 时间: 2011-7-17 21:26
参考资料:
SWbemLocator
http://msdn.microsoft.com/en-us/library/aa393719(v=vs.85).aspx
Win32_GroupUser Class
http://msdn.microsoft.com/en-us/library/aa394153
Win32_Account Class
http://msdn.microsoft.com/en-us/library/aa394061(v=VS.85).aspx
Win32_Group Class
http://msdn.microsoft.com/en-us/library/aa394151(VS.85).aspx
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |