WMI查询本地管理员,包括组成员

时间:2017-07-10 15:15:11

标签: wmi wmi-query wmic wql

我知道如何通过WMI获取远程计算机上的本地管理员列表:

concat

这将返回用户和组:

wmic /Node:"ComputerName" path win32_groupuser where (groupcomponent="win32_group.name=\"administrators\",domain=\"Computername\"")

但是,如果用户是上述 GroupComponent PartComponent win32_group.domain="Computername",name="administrators" \\Computername\root\cimv2:Win32_UserAccount.Domain="Computername",Name="Administrator" win32_group.domain="Computername",name="administrators" \\Computername\root\cimv2:Win32_Group.Domain="MYDOMAIN",Name="Domain Admins" win32_group.domain="Computername",name="administrators" \\Computername\root\cimv2:Win32_Group.Domain="MYDOMAIN",Name="SomeOtherGroup" win32_group.domain="Computername",name="administrators" \\Computername\root\cimv2:Win32_UserAccount.Domain="MYDOMAIN",Name="MyUser" 的成员,我需要知道他是会员 - 因此也是本地管理员。所以,我需要扩展(可能递归地)所有组成员。

是否有可以在SomeOtherGroup上自我加入的WMI查询,扩展了本地管理员所有组的所有用户名?

1 个答案:

答案 0 :(得分:0)

ASSOCIATORS OF statement中有WMI Query Language (WQL)

  

ASSOCIATORS OF语句检索所有实例   与特定源实例相关联。那些实例   检索到的被称为端点。返回每个端点   多次,因为它与来源之间存在关联   对象

以下VBScript应该完成这项工作:

option explicit

Function wmiGroupMembers( sGroupName, intLevel)
  Dim colSubGroups, colSubGroup, sQuery

  sQuery = "Associators of {win32_group.domain=""" & sDomainName & _
                                      """,name=""" & sGroupName & """} " _
        & "Where ResultRole = PartComponent"

  Set colSubGroups = objWMIService.ExecQuery( sQuery )
  For Each colSubGroup in colSubGroups
    If LCase( colSubGroup.Path_.Class) = "win32_group" Then
      wmiGroupMembers colSubGroup.Name, intLevel + 1
    End If 
    sResult = sResult & vbNewLine & intLevel _
                          & vbTab & sGroupName _
                          & vbTab & colSubGroup.Domain _
                          & vbTab & colSubGroup.Name
  Next
End Function

Dim sResult, wshNetwork, sComputerName, sDomainName, objWMIService
sResult = ""
Set wshNetwork    = WScript.CreateObject( "WScript.Network" )
    sComputerName = wshNetwork.ComputerName
    sDomainName   = UCase( wshNetwork.UserDomain)
Set objWMIService = GetObject("winmgmts:\\" & sComputerName & "\root\cimv2")

wmiGroupMembers "administrators", 0

Wscript.Echo sResult

请注意,尽管有wmic个等效项(请参阅ASSOC verb),但由于任何cmd实用程序的所有输出都是文本(即{}},因此它的使用可能是一个棘手的问题。不是对象),必须使用for loop command解析。