Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Grumoboi
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 7
1

Определить все локальные рабочие группы, к которым принадлежит текущий пользователь

27.11.2015, 21:19. Просмотров 1045. Ответов 4
Метки vbs (Все метки)

Здравствуйте. Нужна помощь разобраться как написать VBS, используя WMI\WSH, который определяет все локальные рабочие группы к которым принадлежит текущий пользователь Windows. Есть подсказка использовать классы Win32_ComputerSystem и Win32_Group. Но что-то не могу никак понять как это сделать. Клас Win32_Group выводит все группы, но не показывается пользователей этих групп. Прошу помощи
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2015, 21:19
Ответы с готовыми решениями:

Перечислить локальные группы в которые входит пользователь
Ребят при компиляции программы выдает ошибки что не может конвертировать char в юникод, помогите...

Определить плоскости, которым принадлежит введенная пользователем точка
Дано массив объектов "плоскость Ax + By + Cz + D = 0". Определить плоскости, которым принадлежит...

Рабочие группы
Люди, спасайте! Создала рабочую группу, но по невнимательности не выделила из нее администратора и...

Рабочие группы
Здравствуйте товарищи. Вот такой вопрос: В Windows XP если зайти в Сетевое окружение, выбраться...

Две рабочие группы
Здравствуйте, есть такая ситуация. Есть парк компьютеров, Этот парк разделен на 2 части, и у...

4
greg zakharov
Покинул форум
2235 / 901 / 252
Регистрация: 07.05.2015
Сообщений: 1,794
28.11.2015, 13:11 2
Способ ниже не требует наличия прав админа и доступа к WMI объектам:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim arrPath
Dim strCode
 
With CreateObject("WScript.Shell")
  arrPath = Split(.ExpandEnvironmentStrings("%PATH%"), ";", -1, 1)
  With CreateObject("Scripting.FileSystemObject")
    For i = 0 To UBound(arrPath)
      If .FileExists(arrPath(i) & "\powershell.exe") Then
        WScript.Echo "PowerShell has been found..."
        Exit For
      End If
    Next
  End With
  
  strCode = "powershell /nop /ex bypass ""&{([Type]""$($$='Security.Principal.')" & _
            "$$WindowsIdentity"")::GetCurrent().Groups | % {(New-Object ""$($$)" & _
            "SecurityIdentifier""($_)).Translate([Type]""$($$)NTAccount"")}" & _
            ";[Console]::ReadKey()}"""
  .Run strCode
End With
1
Grumoboi
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 7
28.11.2015, 13:46  [ТС] 3
Запустил, он нашел PowerShell , потом консоль. И всё. а как получить список групп и вывести на экран?

Добавлено через 1 минуту
А можно как-то всё-таки через WMI сделать?
0
Dmitrii
2604 / 536 / 107
Регистрация: 21.03.2012
Сообщений: 1,043
30.11.2015, 11:54 4
Лучший ответ Сообщение было отмечено Grumoboi как решение

Решение

Цитата Сообщение от Grumoboi Посмотреть сообщение
... через WMI...
Пример (ориентирован на использование в консольном режиме):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim objWsNet, objWMI, objGroups, objGroup, strDomain, strUser
Set objWsNet = CreateObject("WScript.Network")
strDomain = objWsNet.UserDomain
strUser = objWsNet.UserName
Set objWsNet = Nothing
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objGroups = objWMI.ExecQuery("ASSOCIATORS OF {Win32_UserAccount.Domain='" & strDomain & "',Name='" & strUser & "'} WHERE AssocClass=Win32_GroupUser")
For Each objGroup In objGroups
    If objGroup.LocalAccount Then WScript.Echo objGroup.Name
Next
Set objGroup = Nothing: Set objGroups = Nothing: Set objWMI = Nothing
WScript.Quit 0
Однако замечу, что если у вас домен, то сценарий с использованием WMI будет работать довольно медленно.
В случае домена гораздо быстрее будет работать сценарий с использованием ADSI. Ниже - соответствующий пример (ориентирован опять-таки на использование в консольном режиме):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim objWsNet, objComputer, objItem, strDomain, strUser, strComputer, strADsPath
Set objWsNet = CreateObject("WScript.Network")
strDomain = objWsNet.UserDomain
strUser = objWsNet.UserName
strComputer = objWsNet.ComputerName
Set objWsNet = Nothing
strADsPath = GetObject("WinNT://" & strDomain & "/" & strUser & ",user").ADsPath
Set objComputer = GetObject("WinNT://" & strComputer & ",computer")
For Each objItem In objComputer
    If UCase(objItem.Class) = "GROUP" Then
        If objItem.IsMember(strADsPath) Then WScript.Echo objItem.Name
    End If
Next
Set objItem = Nothing: Set objComputer = Nothing
WScript.Quit 0
1
Grumoboi
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 7
30.11.2015, 17:03  [ТС] 5
Спасибо огромное от души))
0
30.11.2015, 17:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2015, 17:03

ArrayList - Как получить текущий индекс с которым работает цикл?
Всем привет. Есть ArrayList со строками. Идет отображение всех элементов из ArrayList с помощью...

Зачем нужны рабочие группы?
Приветствую! 1. Не могу найти ответ на простейший вопрос: зачем нужны рабочие группы в Windows?...

Рабочие группы под WIN
Вопрос по рабочим группам, под windows 10 и 7. Имеется локальный сеть , без домена. ОС - 10-и в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru