複数のサーバーに Alteryx があり、Alteryx API ではなく、コマンド ラインまたは PowerShell からリモートでジョブを実行できるようにしたいと考えています。
私は何年もの間、コマンドラインからローカルでalteryxフローを実行し、ローカルでpowershellを実行してきましたが、現在、複数のサーバーで特定のフローをこの方法で実行する必要がありますが、反応するWebアプリからトリガーする必要があります。私たちは API を試してみましたが、うまくいきましたが、ジョブが長時間キューに入れられることが多く、ほぼリアルタイムの応答が必要であり、これらのジョブは数秒で実行されます。私たちの解決策は、Alteryx API の外部でトリガーして、リソースが余っているワーカー ノードですぐに実行することです。
私たちの問題は、ローカルで実行するとうまく動作するスクリプトをテストすると、alteryxenginecmd.exe プログラムの実行を除いて、他のすべてのコマンドが正常に実行されることです。
パススルーで Start-Process を使用すると、プロセスが生成されますが、alteryx ジョブからの出力はなく、エラーも検出されません。Call operator & if を使用すると、ワークフローが見つからないと言って失敗するため、alteryxenginecmd.exe は起動しますが、パラメーターとして実行するフローの完全なパスを読み取ったり受け取ったりしません。しかし、ローカルでは問題なく動作します。資格情報を使用してサインオンを強制し、資格情報の問題を解決しましたが、結果は変わりませんでした。
Powershellにはいくつかの奇妙な点があることを知っています。スクリプトがリモートサーバーから実行される場合、コマンドを指定する方法に微調整があるのではないでしょうか?
これは、リモート サーバーから実行したいスクリプトであり、示されている 4 つのシナリオのいずれでも正常に動作します。
$rundate = (Get-Date -format 'u') -replace "-","" -replace ":","" -replace " ","-"
$Pgm2Run = "\<somepath>\RunScriptRemote\RunRemoteTest2 - NoDB.yxmd"
$Bat2Run = "\\<somepath>\RunScriptRemote\RunRemoteTestJob.bat"
$JobLogFile = "\<somepath>\RunScriptRemote\LogsJob\JobTranscript $rundate.txt"
$ScriptLogFile = "\<somepath>\RunScriptRemote\LogsScript\RunJobTranscript $rundate.txt"
Start-Transcript -Path $ScriptLogFile
echo " "
echo "$rundate Start --> "
Echo "$rundate Before Start-Process"
#1 Start-Process -filepath "AlteryxEngineCmd.exe" -ArgumentList `"$Pgm2Run`" -RedirectStandardOutput $JobLogFile -Wait -PassThru
#2 Start-Process -filepath $Bat2Run -RedirectStandardOutput $JobLogFile -Wait -PassThru
#3 & AlteryxEngineCmd.exe "$Pgm2Run"
AlteryxEngineCmd.exe "$Pgm2Run"
echo "$rundate After Start-Process"
echo "$rundate End --> "
Stop-Transcript
このコマンドは Server1 で実行され、server2 で上記のスクリプトを実行します。
Invoke-Command -ComputerName server2 -FilePath "\\<somepath>\RunScriptRemote\RunAlteryxAndLogIt.ps1"
そして、これは結果です:
20200831-094309Z Before Start-Process
AlteryxEngineCmd.exe Version 2019.4.8.22007 © Alteryx, Inc. - All Rights Reserved.
Started running \\<somepath>\RunRemoteTest2 - NoDB.yxmd
Error - Alteryx Engine: Can't read the file "
Invoke-Command -ComputerName server2 -FilePath "\\<somepath>\RunScriptRemote\RunRemoteTest2 - NoDB.yxmd"
Finished in 0.020 seconds with 1 error
20200831-094309Z After Start-Process
問題がその1つのexeを適切に実行しているように見えるため、それがAlteryxのものである可能性があります。スクリプトはリモートサーバーから適切にトリガーされ、他のコマンドをテストしてすべて機能しました。同じスクリプトをローカルで実行するとローカルで正常に動作しますが、リモートで実行すると、このexeを実行するコマンドが動作しないようです。これは、別のスクリプトを実行するスクリプト間の障壁のようなものです。
別のサーバーからexeをリモートで実行することに精通しているpowershellの専門家はいますか?