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

WMI查询本地管理员,包括组成员,wmi,wmi-query,wmic,wql,Wmi,Wmi Query,Wmic,Wql,我知道如何通过WMI获取远程计算机上的本地管理员列表: wmic/Node:“ComputerName”路径win32\u组用户,其中(groupcomponent=“win32\u group.name=\“administrators\”,domain=“ComputerName\”) 这将返回用户和组: 组组件部分组件 win32\u group.domain=“Computername”,name=“administrators”\\Computername\root\cimv2:wi

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

wmic/Node:“ComputerName”路径win32\u组用户,其中(groupcomponent=“win32\u group.name=\“administrators\”,domain=“ComputerName\”)

这将返回用户和组:


组组件部分组件
win32\u group.domain=“Computername”,name=“administrators”\\Computername\root\cimv2:win32\u UserAccount.domain=“Computername”,name=“Administrator”
win32\u group.domain=“Computername”,name=“administrators”\\Computername\root\cimv2:win32\u group.domain=“MYDOMAIN”,name=“domain Admins”
win32\u group.domain=“Computername”,name=“administrators”\\Computername\root\cimv2:win32\u group.domain=“MYDOMAIN”,name=“SomeOtherGroup”
win32\u group.domain=“Computername”,name=“administrators”\\Computername\root\cimv2:win32\u UserAccount.domain=“MYDOMAIN”,name=“MyUser”

但是,如果用户是上述
SomeOtherGroup
的成员,我需要知道他是成员,因此是本地管理员。因此,我需要(可能是递归地)扩展所有组成员

是否有一个WMI查询可以在
win32\u组
上自动加入,扩展所有本地管理员组的所有用户名?

中有:

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
等价物(请参阅),但它的使用可能是一个棘手的问题,因为任何
cmd
实用程序的所有输出都是文本(即,不是对象),必须使用