I use the following script as a way of keeping my Citrix session alive to thwart security guys and their over-aggressive timeouts.
Normally I don't like to use sendkeys, but this seemed like the perfect way to trick ica into thinking keys were being pressed...
PowerShell and VBScript versions below.
#
# Find the wfica.exe process and poke keystrokes at it, preventing a Citrix session from timing out
# Be careful what you have open and what keystrokes you poke
[System.Object[]]$processes = get-process | where {$_.ProcessName -eq "wfica32.exe"}
if ($processes.count -ge 1) { $process = $processes[0] }
if ($process -is [System.Diagnostics.Process])
{
$processes | format-list -property *
for (;;)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::AppActivate($process.Id)
start-sleep -seconds 1
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("1")
start-sleep -seconds 240
}
}
Set objWshShell = CreateObject("Wscript.Shell")
strProcessName = "wfica32.exe"
intProcessID = 0
Call FindProcessID(strProcessName, intProcessID)
if (intProcessID > 0) Then
wscript.echo "Found process ID: " & intProcessID
Do
objWshShell.AppActivate(intProcessID)
WScript.Sleep 1000
objWshShell.SendKeys "1"
WScript.Sleep 240000
Loop
End If
Function FindProcessID(ByRef strProcessName, ByRef intProcessID)
strQuery = "Select * from Win32_Process Where Name = '" & strProcessName & "'" ' WQL query string looking for the specified process
Set objNameSpace = GetObject("winmgmts://./root/cimv2") ' The cimv2 namespace of the local machine
FindProcessID = vbFalse
Set objProcessSet = objNameSpace.ExecQuery(strQuery) ' Execute the query
For Each objProcess in objProcessSet ' For each process in the set, ordered by oldest to newest
intProcessID = objProcess.ProcessID
WScript.Echo "Found process, ID: " & intProcessID
WScript.Echo objProcess.Name & ", " & intProcessID & ", " & objProcess.CreationDate & ", " & objProcess.CommandLine & ", " & objProcess.Priority & ", " & objProcess.WorkingSetSize & ", " & objProcess.PageFileUsage
FindProcessID = vbTrue
Next
Set objNameSpace = Nothing : Set objProcessSet = Nothing : Set objProcess = Nothing
End Function
Wayne's World of IT (WWoIT), Copyright 2010 Wayne Martin.
Information regarding Windows Infrastructure, centred mostly around commandline automation and other useful bits of information.
6 comments:
Can't get the Sendkey part to work. Doesn't seem to be refreshing my sessions. Any suggestions?
I need one more suggestion on this You said keeping Citrix session alive to thwart security guys and their over-aggressive timeouts.Is this the best way to achieve this does it have some weakness depending on which we can take decision.Can you suggest some alternate to this
I have been trying this script at work while several apps and browsers were open through a Citrix connection but the timeout still happens. If you could make any suggestions or what to look for while I'm trying to do research on this would be much appreciated.
The sendkeys is working, but it is not preventing the time out.
Thanks for shareing this comment
Post a Comment