返回列表 发帖

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

评分人数

    • batman: 请将代码用code标签括起来,方便他人复制PB -2

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

TOP

谢谢版主,这段代码可以运行,但是运行效率极低,平均15秒显示一个用户,如果碰上用户名多的机器简直无法想象,有没有效率高些的代码??

TOP

另外,有些机器要求输入用户名密码,这段代码哪里可以插入用户名密码

TOP

这样,可以考虑用另外一个控件,不过现在没空先,晚上回去再帮你看看
---学无止境---

TOP

我写了一个实现了半成方法,不知道会不会比较快,但是支持用户密码。这个缺点是只能列出“用户名+用户组”(没有分开的)和“用户名”,效果自己看:
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
    COPY
要完全实现可能就得用那个效率不高的方法了
---学无止境---

TOP

参考资料:

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
---学无止境---

TOP

返回列表