最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

vbscript - How do I find the Task Manager Session Name using WMI - Stack Overflow

programmeradmin1浏览0评论

I am using the following VBScript code to run a TaskList to query Task Manager information

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "CMD /C TaskList /FI ""ImageName eq Excel.exe"""

It returns data something like the following:

Image Name     PID Session Name  Session# Mem Usage
============ ===== ============= ======== =========
EXCEL.EXE    23084 Console              1  58,064 K

Is there a WMI equivalent Command / Property that I can use to retrieve the Session name? Using the Win32_Process class, I can get things like Name, SessionID, ProcessID and CreationDate. It would be nice if I could grab the SessionName also.

I am using the following VBScript code to run a TaskList to query Task Manager information

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "CMD /C TaskList /FI ""ImageName eq Excel.exe"""

It returns data something like the following:

Image Name     PID Session Name  Session# Mem Usage
============ ===== ============= ======== =========
EXCEL.EXE    23084 Console              1  58,064 K

Is there a WMI equivalent Command / Property that I can use to retrieve the Session name? Using the Win32_Process class, I can get things like Name, SessionID, ProcessID and CreationDate. It would be nice if I could grab the SessionName also.

Share Improve this question asked Feb 5 at 13:10 j2associatesj2associates 1,15511 silver badges20 bronze badges 1
  • I found this link to the Win32_Process class: learn.microsoft.com/en-us/windows/win32/cimwin32prov/… which has no Session Name in it's list of properties. Is it perhaps in another Win32 class? – j2associates Commented Feb 5 at 15:45
Add a comment  | 

1 Answer 1

Reset to default 1

Actually there is a cmd command to get SessionName:

query session

that will return something like this:

You can see there is a ">" in second line.

So by SessionName if you mean "Console" for this picture you can use this script:

' Create a WScript Shell object
Set objShell = CreateObject("WScript.Shell")

' Execute the "query session" command and capture the output
Set objExec = objShell.Exec("query session")

' Read the output from the command
strOutput = objExec.StdOut.ReadAll()

' Split the output into lines
arrLines = Split(strOutput, vbCrLf)

' Loop through each line to find the current session
For Each strLine in arrLines
    ' Check if the line contains the current session (marked with ">")
    If InStr(strLine, ">") > 0 Then
        ' Split the line into columns (assuming columns are separated by spaces)
        arrColumns = Split(strLine)
        
        ' The session name is the first column (after the ">")
        strSessionName = arrColumns(0)
        
        ' Remove the ">" character from the session name
        strSessionName = Replace(strSessionName, ">", "")
        
        ' Output the session name to the user
        WScript.Echo "Current Session Name: " & strSessionName
        
        ' Exit the loop once the current session is found
        Exit For
    End If
Next

or if you want to get username (Column 2) you can use this: (Extra code is for deleting extra spaces)

' Create a WScript Shell object
Set objShell = CreateObject("WScript.Shell")

' Execute the "query session" command and capture the output
Set objExec = objShell.Exec("query session")

' Read the output from the command
strOutput = objExec.StdOut.ReadAll()

' Split the output into lines
arrLines = Split(strOutput, vbCrLf)

' Loop through each line to find the current session
For Each strLine in arrLines
    ' Trim leading and trailing spaces from the line
    strLine = Trim(strLine)
    
    ' Check if the line contains the current session (marked with ">")
    If InStr(strLine, ">") > 0 Then
        ' Split the line into columns (using spaces as delimiters)
        arrColumns = Split(strLine, " ")
        
        ' Initialize a counter to find the username
        Dim i
        i = 0
        
        ' Loop through the columns to find the username
        For Each strColumn in arrColumns
            ' Skip empty columns (caused by multiple spaces)
            If strColumn <> "" Then
                ' The username is the second non-empty column
                If i = 1 Then
                    strUsername = strColumn
                    Exit For
                End If
                i = i + 1
            End If
        Next
        
        ' Output the username to the user
        WScript.Echo "Current Username: " & strUsername
        
        ' Exit the loop once the current session is found
        Exit For
    End If
Next
发布评论

评论列表(0)

  1. 暂无评论