我有一个脚本,用于查找所有打开的Citrix连接,并断开与登录到Windows(Citrix Web Interface连接)的用户无关的任何连接 . 它在32位机器(XP或7)上运行得很好,但在64位机器上却不行 . 我知道它确实依赖于两个Citrix reg键( AllowLiveMonitoring & AllowSimulationAPI )和 WfIcaLib.dll ,它们将位于不同架构的不同位置 . 我认为这是我的脚本和64位的东西,但是当我从32位机器卸载Receiver时,我得到了同样的错误 . 当我重新安装时,错误消失了 . 没有特殊的安装开关或方法,只需定期安装3.4.300接收器 . 因此,虽然它必须是64位相关的,但它与Citrix相关,而不仅仅是VBScript代码 .
这是我的脚本, Set icaClient = CreateObject("Citrix.ICAClient") 行是错误的地方 .
提前致谢 . 布赖恩
Option Explicit
Dim strWindowsUser
Dim icaClient
Dim sessionHandle
Dim numSessions
Dim sessionID
Dim sessionInfo
Dim ct
Dim wshNetwork
' Get the name of the generic Windows user logged in
Set wshNetwork = WScript.CreateObject("WScript.Network")
strWindowsUser = wshNetwork.UserName
' As the next user is logging into the workstation, look for any
' Citrix sessions not tied to the generic Windows user and disconnect
' the session.
' If you don't want to disconnect, use a Logoff command as follows:
' icaClient.Logoff()
Set icaClient = CreateObject("Citrix.ICAClient")
sessionHandle = icaClient.EnumerateCCMSessions()
numSessions = icaClient.GetEnumNameCount(sessionHandle)x
For ct = 0 To numSessions - 1
sessionID = icaClient.GetEnumNameByIndex(sessionHandle, ct)
icaClient.StartMonitoringCCMSession sessionID, True
'SessionServer = 0,
'SessionUsername = 1
'SessionDomain = 2
sessionInfo = icaClient.GetSessionString(1)
If lcase(sessionInfo) <> lcase(strWindowsUser) Then
icaClient.Disconnect()
End If
icaClient.StopMonitoringCCMSession sessionID
Next
icaClient.CloseEnumHandle sessionHandle
1 回答
尝试手动指定64位cscript.exe
C:>%windir%\ syswow64 \ cscript.exe script.vbs
我没有机器试试这个,但这是我过去的工作 .
编辑:测试您的代码,它在硬编码64位cscript时有效 . 我正在使用Windows 8.1(x64)和Receiver 4.2(ICA Client 14.2)