找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22014|回复: 6

[问题求助] VBS如何实现获取远程机子里的所有用户和所属组?

[复制链接]
发表于 2011-7-14 18:45:46 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1PB -2 收起 理由
batman -2 请将代码用code标签括起来,方便他人复制

查看全部评分

发表于 2011-7-14 22:05:08 | 显示全部楼层
如果你这段代码可以使用,那么修改点东西就可以远程使用,前提你要有访问和操作那台计算机的权限
  1. option explicit

  2. Dim ComputerName,compu,oUser,oGroup

  3. ComputerName = "此处为那台计算机的名字"
  4. Set compu=GetObject("WinNT://"& ComputerName)   

  5. compu.Filter = Array("User")

  6. For Each oUser In compu
  7.      wscript.echo  oUser.Name & " : " & GetItsGroup(oUser.Name)
  8. Next
  9. WScript.quit

  10. Function GetItsGroup(sUser)
  11.     Set oUser = GetObject("WinNT://这里填那台机器的IP/" & sUser & ",user")
  12.     For Each oGroup In oUser.Groups
  13.         GetItsGroup = GetItsGroup & oGroup.Name & " "
  14.     Next
  15. End Function
复制代码
 楼主| 发表于 2011-7-15 10:32:49 | 显示全部楼层
谢谢版主,这段代码可以运行,但是运行效率极低,平均15秒显示一个用户,如果碰上用户名多的机器简直无法想象,有没有效率高些的代码??
 楼主| 发表于 2011-7-15 10:43:19 | 显示全部楼层
另外,有些机器要求输入用户名密码,这段代码哪里可以插入用户名密码
发表于 2011-7-15 11:45:55 | 显示全部楼层
这样,可以考虑用另外一个控件,不过现在没空先,晚上回去再帮你看看
发表于 2011-7-17 21:24:44 | 显示全部楼层
我写了一个实现了半成方法,不知道会不会比较快,但是支持用户密码。这个缺点是只能列出“用户名+用户组”(没有分开的)和“用户名”,效果自己看:
  1. Dim strComputer,strUsername,strPassword
  2. Dim colSWbemObjectSet,objSWbemObject,strOut

  3. strComputer = "计算机名"
  4. strUsername = "用户名"   '没有就留空
  5. strPassword = "密码"     '没有就留空

  6. Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  7. Set objSWbemServices = objSWbemLocator.ConnectServer _
  8.     (strComputer, "root\cimv2", strUsername, strPassword)
  9. Set colSWbemObjectSet = objSWbemServices.ExecQuery( _
  10.     "SELECT * FROM Win32_Account",,48)

  11. strOut = "用户名+用户组:" & vbCrLf
  12. For Each objSWbemObject In colSWbemObjectSet
  13.   strOut = strOut & objSWbemObject.Name & vbCrLf
  14. Next

  15. WScript.Echo strOut

  16. strOut = "用户组:" & vbCrLf

  17. Set colSWbemObjectSet = objSWbemServices.ExecQuery( _
  18.     "SELECT * FROM Win32_Group",,48)
  19.    
  20. For Each objSWbemObject In colSWbemObjectSet
  21.   strOut = strOut & objSWbemObject.Name & vbCrLf
  22. Next

  23. WScript.Echo strOut
  24.    
复制代码
要完全实现可能就得用那个效率不高的方法了
发表于 2011-7-17 21:26:01 | 显示全部楼层
参考资料:

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 16:48 , Processed in 0.016636 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表