2017-07-10 8 views
0

私はWMI経由でリモートマシン上のローカル管理者のリストを取得する方法を知っている:WMIクエリのローカル管理者

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のメンバーである場合、彼がメンバーであること、つまりローカル管理者であることを知る必要があります。ですから、私はすべてのグループメンバーを(再帰的に)展開する必要があります。

ローカル管理者であるすべてのグループのすべてのユーザー名を展開して、win32_groupに自己結合できるWMIクエリはありますか?

答えて

0

WMI Query Language (WQL)ASSOCIATORS OF statementがある:

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を使用して解析する必要があります。

関連する問題