如果您确定要从注册表中获取信息,则必须扫描 HKEY_USERS 下的键(.DEFAULT和*_Classes除外)以找出其配置文件已加载并因此登录的用户。顺便说一下,这就是 SysInternals PsLoggedOn工具的工作原理;你可以看看它的源代码(Archive.org 有它)来了解这个想法。
或者,如果您可以使用 WMI,您可以通过枚举Win32_LogonSession
类实例并检索相关Win32_Account
对象来获取登录用户的列表;像这样的东西:
strComputer = "."
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSessions = oWMI.ExecQuery _
("SELECT * FROM Win32_LogonSession WHERE LogonType = 2") ' Interactive sessions only
For Each oSession in colSessions
Set colAccounts = oWMI.ExecQuery("ASSOCIATORS OF {Win32_LogonSession.LogonId=" & oSession.LogonId & "} " _
& "WHERE AssocClass=Win32_LoggedOnUser Role=Dependent" )
For Each oAccount in colAccounts
WScript.Echo "Caption: " & oAccount.Caption
WScript.Echo "Domain: " & oAccount.Domain
WScript.Echo "Name: " & oAccount.Name
Next
Next
还有一个Win32ComputerSystem.UserName
属性保存其桌面当前处于活动状态的登录用户的名称:
strComputer = "."
Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = oWMI.ExecQuery("SELECT * FROM Win32_ComputerSystem")
For Each objItem in colItems
Wscript.Echo objItem.UserName
Next