用于在 Citrix 实例中触发 VBS 脚本的本地 Powershell 脚本

Local Powershell script to trigger VBS script inside Citrix instance

我正在尝试获取本地 powershell 脚本来触发 citrix 实例内的 VBS 脚本。事件应该是这样的:

Citrix 实例打开 Windows Explorer ----> 在 windows Explorer 会话中键入的脚本的网络路径

我正在使用 Citrix 接收器安装附带的 WfIcaLib.dll (ICOSDK)。 Documentation PDF for the Citrix ICOSDK is available here

这就是我正在使用的代码,它在 Powershell 命令行中完美运行,但是当我使用 32 位 ISE 时,它除了告诉我 DLL 已加载外什么也没做。我没有收到任何错误,但 Citrix 客户端从未真正打开,就像我通过 Powershell 命令行 运行 执行完全相同的命令时那样。

#load Citrix ICA Client SDK
[System.Reflection.Assembly]::LoadFile("C:\Program Files (x86)\Citrix\ICA Client\WfIcaLib.dll")

$ICA = New-Object WFICALib.ICAClientClass 
$ICA.Address = "***.***.***.***:****" 
$ICA.Application = "Windows ExplorerFED6" 
$ICA.Username = "******"
$ICA.Domain = "**" 
$ICA.Launch = $true
$ICA.Outputmode = [WfIcaLib.OutputMode]::OutputModeNormal 
$ICA.SetProp("Password", "*********")
$ICA.TWIMode=$true 
$ICA.Connect()

有什么想法吗?

编辑:已解决 - 在 32 位 ISE 下重新打开并让代码正常工作后,我无法 运行 .ps1 文件,因为它一直默认为 64 位(即使使用在 32 位 powershell 版本上打开)。 运行 通过命令提示符或 32 位 powershell 控制台运行的脚本都有效。

使用 Mike Garuccio 建议的任何方法都可以正常工作。我很可能最终会使用任务计划程序 运行 脚本。

看起来问题出在版本问题上,您可以使用 start-job 来处理(最初打算用 运行space 来解决这个问题,但代码太多并没有真正的好处) .这将开始 运行 你的代码在 32 位 powershell 下的工作,它仍然应该在屏幕上放置任何 GUI 元素或弹出窗口,但如果你以后需要从脚本中获取任何数据,你将需要接收工作。代码如下所示。

$SB = {
[System.Reflection.Assembly]::LoadFile("C:\Program Files (x86)\Citrix\ICA Client\WfIcaLib.dll")

  $ICA = New-Object WFICALib.ICAClientClass 
  $ICA.Address = "***.***.***.***:****" 
  $ICA.Application = "Windows ExplorerFED6" 
  $ICA.Username = "******"
  $ICA.Domain = "**" 
  $ICA.Launch = $true
  $ICA.Outputmode = [WfIcaLib.OutputMode]::OutputModeNormal 
  $ICA.SetProp("Password", "*********")
  $ICA.TWIMode=$true 
  $ICA.Connect()
}

Start-Job -ScriptBlock $SB -RunAs32
get-job | Receive-Job

或者,您也可以使用一个简单的 .bat 文件作为启动器,例如 C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -file yourscript.ps1

或者如果您需要将所有内容都包装在 powershell 中并且工作不起作用,您可以使用解决方案 Here,它基本上做同样的事情但是来自 powershell(删除他们使用的 if 语句,只需像下面那样使用其中包含的内容,以及您需要对配置文件和交互设置进行的任何更改。)

&"$env:windir\syswow64\windowspowershell\v1.0\powershell.exe" -noninteractive -noprofile -file "C:\Path o\script.ps1" -executionpolicy bypass

希望其中一个对你有用!