Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Найти имя пользователя Windows через WMI / 5 сообщений из 5, страница 1 из 1
26.04.2018, 10:39
    #39636610
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти имя пользователя Windows через WMI
Наворочено, но работает!
Подход заключается в том, чтобы использовать WMI для отображения активных сеансов, а затем перекрестно ссылаться на сеанс с зарегистрированным именем пользователя. Это можно сделать, выполняя что-то вроде:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
'---------------------------------------------------------------------------------------
' Procedure : WMI_GetUsernames
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : http://www.cardaconsultants.com
' Purpose   : Return a dictionary (unique values) of usernames for the specified computer
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
' Req'd Refs: Uses Late Binding, so none required
'
' Входные переменные:
' ~~~~~~~~~~~~~~~~
' sHost     : хост-компьютер для запроса, пропустите для локального ПК
'
' Usage:
' ~~~~~~
'
'
' История изменений:
' Rev       Date(yyyy/mm/dd)        Description
' **************************************************************************************
' 1         2018-04-13              Initial Release
'---------------------------------------------------------------------------------------
Public Function WMI_GetUsernames(Optional sHost As String = ".") As Object    'Scripting Dictionary
    'Ref: https://msdn.microsoft.com/en-us/library/aa394189(v=vs.85).aspx
    '     https://msdn.microsoft.com/en-us/library/aa394172(v=vs.85).aspx
    '     https://msdn.microsoft.com/en-us/library/aa384793(v=vs.85).aspx
    On Error GoTo Error_Handler
    Dim oWMI                  As Object    'WMI object to query about the PC's OS
    Dim sWMIQuery             As String    'WMI Query
    Dim oLogonSessions        As Object
    Dim oLogonSession         As Object
    Dim oUsers                As Object
    Dim oUser                 As Object
    Dim dictUsers             As Object    'Scripting Dictionary
 
    Set WMI_GetUsernames = Nothing    'Always empty it!
    Set dictUsers = CreateObject("Scripting.Dictionary")    'New dictionary
    Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sHost & "\root\cimv2")
    sWMIQuery = "SELECT * " & _
                "FROM Win32_LogonSession " & _
                "WHERE LogonType=2"
    Set oLogonSessions = oWMI.ExecQuery(sWMIQuery)
    For Each oLogonSession In oLogonSessions
        'Теперь, когда у нас есть активные сеансы, давайте узнаем, кто их запускает.
        sWMIQuery = "Associators of " & _
                    "{Win32_LogonSession.LogonId=" & oLogonSession.LogonId & "} " & _
                    "WHERE AssocClass=Win32_LoggedOnUser Role=Dependent"
        Set oUsers = oWMI.ExecQuery(sWMIQuery)
        For Each oUser In oUsers
            With oUser
                '                Debug.Print .Name
                If dictUsers.Exists(.Name) = False Then dictUsers.Add .Name, .Name
            End With
        Next
    Next
    Set WMI_GetUsernames = dictUsers
 
Error_Handler_Exit:
    On Error Resume Next
    Set dictUsers = Nothing
    Set oUsers = Nothing
    Set oUser = Nothing
    Set oLogonSession = Nothing
    Set oLogonSessions = Nothing
    Set oWMI = Nothing
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Source: WMI_GetUsernames" & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occured!"
    Resume Error_Handler_Exit
End Function

 
'Вот как это можно использовать!
Sub TestMe()
    Dim User As Variant
'    Dim WMI_GetUsernames As Object
 
    For Each User In WMI_GetUsernames.keys
        Debug.Print User
    Next
End Sub


-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
26.04.2018, 10:57
    #39636620
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти имя пользователя Windows через WMI
Код: vbnet
1.
If dictUsers.Exists(.Name) = False Then dictUsers.Add .Domain & .Name, .Name & IIF(.LocalAccount, " (local)", " (" & .Domain & ")")
...
Рейтинг: 0 / 0
26.04.2018, 11:20
    #39636633
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти имя пользователя Windows через WMI
Ну да, так ещё имя домена получить можно.
...
Рейтинг: 0 / 0
26.04.2018, 12:05
    #39636668
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти имя пользователя Windows через WMI
Joss , не, просто в разных доменах могут быть одноимённые юзеры - исходный код покажет только одного, причём фиг знает, какого именно.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
04.04.2020, 01:40
    #39943779
alf2006x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Найти имя пользователя Windows через WMI
Здрасьте.

Очень нужен VB скрипт, который сможет прочитать список текущих активных RDP пользователей.
Ну как в диспетчере на закладке "Пользователи". Состояния: "Активен" или "Отключен"

Не подскажете как это сделать при помощи winmgmts? Чувствую что это где-то тут зарыто.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Найти имя пользователя Windows через WMI / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]