レジストリから情報を取得する場合は、HKEY_USERS(.DEFAULTおよび* _Classesを除く)の下のキーをスキャンして、プロファイルがロードされ、ログオンしているユーザーを見つける必要があります。ちなみに、これがSysInternalsPsLoggedOnツールの仕組みです。そのソースコード(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