VB using WMI – get logged in users

vbscript, wmi

How can I use VB scripting with WMI to get the # of logged in users. My installation can only have one user logged in and needs to report an error if more than one user is logged in (via terminal service using Citrix). I don't know that much about Citrix but the Win32_LogonSession with LogonType = 10 seems to return all kinds of junk (ports sessions, etc.). I just need the users…are there any WMI calls that I can just get the # of users logged into Citrix? Below is a snip of my VB code:

Set objWMIService = _    GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & _    strComputer & "\root\cimv2") Set colComputer = _    objWMIService.ExecQuery("Select * from Win32_LogonSession Where LogonType = 10")


Best Solution

The following code should help you out (use strComputer="." for local computer or strComputer="MachineName"):

strComputer = "."   Set objWMI = GetObject("winmgmts:" _               & "{impersonationLevel=impersonate}!\\" _               & strComputer & "\root\cimv2") Set colSessions = objWMI.ExecQuery _     ("Select * from Win32_LogonSession Where LogonType = 10") If colSessions.Count = 0 Then    Wscript.Echo "No interactive users found" Else    WScript.Echo "RDP Sessions:"   For Each objSession in colSessions      Set colList = objWMI.ExecQuery("Associators of " _          & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _          & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )      For Each objItem in colList        WScript.Echo "Username: " & objItem.Name & " FullName: " & objItem.FullName      Next    Next End If 

The original code is here:

How to show logged on users? (Tek-Tips Forums)

This did work with Windows 2003, I can't make any guarantees about later version.