Vbscript VB使用WMI-登录用户

Vbscript VB使用WMI-登录用户,vbscript,wmi,Vbscript,Wmi,如何使用带WMI的VB脚本来获取登录用户的#。我的安装只能有一个用户登录,如果有多个用户登录(通过使用Citrix的终端服务),则需要报告错误。我对Citrix了解不多,但带有LogonType=10的Win32_LogonSession似乎会返回各种垃圾(端口会话等)。我只需要用户…是否有任何WMI调用可以让我获得登录Citrix的用户的数量?下面是我的VB代码片段: Set objWMIService = _ GetObject("winmgmts:" & "{imperso

如何使用带WMI的VB脚本来获取登录用户的#。我的安装只能有一个用户登录,如果有多个用户登录(通过使用Citrix的终端服务),则需要报告错误。我对Citrix了解不多,但带有
LogonType=10的
Win32_LogonSession
似乎会返回各种垃圾(端口会话等)。我只需要用户…是否有任何WMI调用可以让我获得登录Citrix的用户的数量?下面是我的VB代码片段:

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

以下代码应该可以帮助您(对于本地计算机使用
strComputer=“.”
strComputer=“MachineName”
):

原始代码如下:


这确实适用于Windows 2003,我不能保证更高版本。

这实际上不起作用,至少在Win7或2008 R2中不起作用。代码运行正常,但它返回同一帐户的多个实例,并报告可能很久以前登录但现在未登录的帐户。@RyanRies-此答案编写于2009年,鉴于链接到的源文章的原始日期是2006年,它可能只适用于Windows 2000/2003。我会在答覆中更清楚说明这点。
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