You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WMI获取任务管理器中的会话名称?

使用WMI获取进程的会话名称

Win32_Process类本身没有直接提供SessionName属性,想要获取TaskList中显示的会话名称,需要通过关联Win32_Session类实现——该类包含会话ID(SessionId)与对应的会话名称(Name)属性。

方法1:分步查询

先获取目标进程的会话ID,再通过会话ID匹配对应的会话名称:

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

' 查询所有Excel进程
Set colProcesses = objWMIService.ExecQuery("SELECT Name, ProcessId, SessionId FROM Win32_Process WHERE Name = 'EXCEL.EXE'")

For Each objProcess In colProcesses
    WScript.Echo "进程名: " & objProcess.Name
    WScript.Echo "PID: " & objProcess.ProcessId
    WScript.Echo "会话ID: " & objProcess.SessionId
    
    ' 通过会话ID查询会话名称
    Set colSessions = objWMIService.ExecQuery("SELECT Name FROM Win32_Session WHERE SessionId = " & objProcess.SessionId)
    For Each objSession In colSessions
        WScript.Echo "会话名称: " & objSession.Name
    Next
    WScript.Echo "-------------------------"
Next

方法2:关联查询

使用WMI的JOIN语句一次性获取进程信息和对应的会话名称:

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

' 关联Win32_Process与Win32_Session的查询语句
strQuery = "SELECT ProcessId, Name, SessionId, Win32_Session.Name AS SessionName " & _
           "FROM Win32_Process " & _
           "JOIN Win32_Session ON Win32_Process.SessionId = Win32_Session.SessionId " & _
           "WHERE Win32_Process.Name = 'EXCEL.EXE'"

Set colResults = objWMIService.ExecQuery(strQuery)

For Each objResult In colResults
    WScript.Echo "进程名: " & objResult.Name
    WScript.Echo "PID: " & objResult.ProcessId
    WScript.Echo "会话ID: " & objResult.SessionId
    WScript.Echo "会话名称: " & objResult.SessionName
    WScript.Echo "-------------------------"
Next

以上两种方法都能获取到和TaskList中Session Name对应的内容,比如示例中的Console。

内容的提问来源于stack exchange,提问作者j2associates

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:41:11