4

В PowerShell я могу сделать запрос, как

> get-wmiobject -query 'select * from win32_groupuser' | % {[wmi]$_.partcomponent|select domain,name,SID}

Который будет перечислять для каждого wmi, домен, имя и sid для каждого пользователя.

Как бы я сделать это с помощью VBScript?

В настоящее время я использую execquery:

Dim strComputer, objWMIService
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"& strComputer & "\root\cimv2")
objWMIService.ExecQuery("select partcomponent,groupcomponent from win32_groupuser")

для первой части, но как мне включить эквивалент | % {[wmi]$_.partcomponent|select domain,name,SID}

В качестве альтернативы, как я мог сделать

gwmi win32_groupuser | % { [wmi]$_.partcomponent | select domain,name,sid}

используя vbscript; поскольку это не запрос, я не могу использовать execquery , но он имеет тот же вывод, что и исходный запрос.

1 ответ1

0

ASSOCIATORS OF ЗАЯВЛЕНИЯ

Оператор ASSOCIATORS OF извлекает все экземпляры, связанные с конкретным исходным экземпляром. Полученные экземпляры называются конечными точками. Каждая конечная точка возвращается столько раз, сколько существует связей между ней и исходным объектом.

Пример скрипта:

option explicit
Dim sResult, strComputer, objWMIService, group, groups, user, users
sResult = ""

strComputer = "."
Set objWMIService = GetObject(_
  "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set groups = objWMIService.ExecQuery( "SELECT * FROM Win32_Group" )
For Each group in groups
  Set users = objWMIService.ExecQuery( _
    "Associators of {Win32_Group.Domain='" & group.Domain _
        & "',Name='" & group.Name & "'} " _
        & "Where AssocClass = Win32_GroupUser ResultRole = PartComponent")
  For Each user in users
    sResult = sResult & vbNewLine & group.Domain & " " & group.Name _
        & vbTab & user.Name & vbTab & user.SID
  Next
Next

Wscript.Echo sResult

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .