0

citrix インスタンス内で VBS スクリプトをトリガーするローカルの powershell スクリプトを取得しようとしています。イベントは次のようになります。

Windows エクスプローラーを開く Citrix インスタンス ----> Windows エクスプローラー セッションに入力されたスクリプトのネットワーク パス

Citrix レシーバーのインストールに付属の WfIcaLib.dll (ICOSDK) を使用しています。Citrix ICOSDK のドキュメント PDF は、こちらから入手できます。

これは私が使用しているコードで、Powershell コマンド ラインで完全に動作しますが、32 ビット ISE を使用すると、DLL がロードされたことを通知する以外に何もしません。エラーは発生しませんが、Powershell コマンドラインからまったく同じコマンドを実行したときのように、Citrix クライアントが実際に開くことはありません。

#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 ファイルを実行できませんでした。コマンド プロンプトまたは 32 ビットの PowerShell コンソールからスクリプトを実行すると、どちらも機能しました。

Mike Garuccio が提案した方法を使用すると、うまくいきました。ほとんどの場合、タスク スケジューラを使用してスクリプトを実行することになります。

4

1 に答える 1

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にラップする必要があり、ジョブが機能しない場合は、ソリューションを使用できますここでは、基本的に同じことを行いますが、powershell内から実行します(使用するifステートメントをドロップし、以下のようにその中に含まれるものを使用するだけです、プロファイルとインタラクティブ設定に関して必要な変更を加えます。)

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

それらのいずれかがあなたのために働くことを願っています!

于 2016-11-23T19:15:42.157 に答える