Jump to content

Alternate to qwinsta.exe to identify Active RDP Citrix Session


Recommended Posts

I have a bunch of scripts that I need to run on systems that are either accessed from RDP or Citrix.

The problem I have had all along is that if you close the RDP or Citrix screen then the scripts will fail even if the user is still logged into the system you were connected to.

I finally found something that will tell me if the session is still active but it's a command line tool called qwinsta.exe.  I prefer not to do stdoutread if there is any other way so I'm wondering if anyone has an idea on how to get the session state for the currently logged in user as this script does but not using stdoutread?

$RunFrom = EnvGet("Sessionname")
ConsoleWrite("Active SessionName = " & $RunFrom & @CRLF & @CRLF)

Local $iPID = Run('"C:\Windows\System32\qwinsta.exe" ' & @UserName, "", @SW_HIDE, 2)
ProcessWaitClose($iPID)                                             ;Need to wait for it to finish before we get the StdOutput values

$sOutput = StdoutRead($iPID)                                        ;Retrieve whatever returned
ConsoleWrite("Active StdOutRead = " & @CRLF & $sOutput & @CRLF & @CRLF)

;----------------------------------------------------------------------------------------
Sleep(15000)    ;Need to disconnect at this point so we can see what happens next!!!
;----------------------------------------------------------------------------------------

$RunFrom = EnvGet("Sessionname")
ConsoleWrite("Disconnected SessionName = " & $RunFrom & @CRLF & @CRLF)

;After Lock, again get session name and session state and write to console
Local $iPID = Run('"C:\Windows\System32\qwinsta.exe" ' & @UserName, "", @SW_HIDE, 2)
ProcessWaitClose($iPID)                                             ;Need to wait for it to finish before we get the StdOutput values

$sOutput = StdoutRead($iPID)                                        ;Retrieve whatever returned
ConsoleWrite("Disconnected StdOutRead = " & @CRLF & $sOutput & @CRLF)

 

Below is what i'm seeing returned by the script.  What I need is just the STATE field.

From RDP:

Active SessionName = RDP-Tcp#0

Active StdOutRead = 
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
>rdp-tcp#0         MyUsername                3  Active  rdpwd               




Disconnected SessionName = RDP-Tcp#0

Disconnected StdOutRead = 
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
>                  MyUsername                3  Disc

 

 

From Citrix:

Active SessionName = ICA-CGP#9

Active StdOutRead = 
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
>ica-cgp#9         MyUsername               43  Active  wdica               



Disconnected SessionName = ICA-CGP#9

Disconnected StdOutRead = 
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
>                  MyUsername               43  Disc

 

Thanks,

Mike

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...