Board logo

标题: [问题求助] 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

如果你这段代码可以使用,那么修改点东西就可以远程使用,前提你要有访问和操作那台计算机的权限
  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

谢谢版主,这段代码可以运行,但是运行效率极低,平均15秒显示一个用户,如果碰上用户名多的机器简直无法想象,有没有效率高些的代码??
作者: 东方月    时间: 2011-7-15 10:43

另外,有些机器要求输入用户名密码,这段代码哪里可以插入用户名密码
作者: broly    时间: 2011-7-15 11:45

这样,可以考虑用另外一个控件,不过现在没空先,晚上回去再帮你看看
作者: broly    时间: 2011-7-17 21:24

我写了一个实现了半成方法,不知道会不会比较快,但是支持用户密码。这个缺点是只能列出“用户名+用户组”(没有分开的)和“用户名”,效果自己看:
  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.    
复制代码
要完全实现可能就得用那个效率不高的方法了
作者: 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://www.bathome.net/) Powered by Discuz! 7.2