我正在尝试使用本地PowerShell脚本来触发citrix实例中的VBS脚本。事件应该是这样的:
Citrix Instance打开Windows资源管理器---->键入Windows资源管理器会话的脚本的网络路径
我使用Citrix接收器安装附带的WfIcaLib.dll(ICOSDK)。 Documentation PDF for the Citrix ICOSDK is available here
所以这是我正在使用的代码,它在Powershell命令行中完美运行,但是当我使用32位ISE时,它除了告诉我已加载DLL之外什么也没做。我没有得到任何错误,但Citrix Client实际上从未像我通过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版本上使用Open With)。通过命令提示符或32位PowerShell控制台运行脚本都有效。
使用Mike Garuccio建议的任何方法都很好。我很可能最终会使用任务计划程序来运行脚本。
答案 0 :(得分:1)
看起来问题是一个版本控制问题,您可以使用start-job来处理(最初是使用运行空间进行此操作,但是这样做的代码要多得多,没有真正的好处)。这将启动一项在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
希望其中一件适合你!