1

Invoke-Commandを使用して、リモートマシンでスクリプトブロックを実行しようとしています。Invoke-command StackOverFlowException

スクリプトブロックは次のとおりです。

Invoke-Command -ComputerName $remoteMachine -ScriptBlock $scriptBlock -AsJob 

私はこれを実行すると、私は、リモートマシン上でプロセスを実行し、それを見ることができます:

$scriptBlock = { echo Y | .\DP.EXE IMPORT $remoteExportDir 'MicrosoftDynamicsAx' $remoteMachine } 

私はこのようなこのスクリプトブロックを実行します。このコマンドは、ローカルで実行するのに約40〜50分かかります。私はこれを遠隔操作すると約25分しか動かない。

ステータスを見ると、エラーなしで完了しましたが、DP.exeはログファイルを生成し、それを生成していません。私は仕事の出力を見てみると、私はそれがこのメッセージに失敗したことを参照してください。

+ CategoryInfo   : NotSpecified: (:String) [], RemoteException 
+ FullyQualifiedErrorId : NativeCommandError 

Process is terminated due to StackOverflowException. 

Process is terminated due to StackOverflowException.

DP.EXE私はちょうどあれば問題なくのMicrosoft Dynamics AX 2012このコマンドは、工事用のテスト環境にデータをインポートするためのアプリケーションですそれをマシン上でローカルに実行します。私は、このコマンドを一連の5台以上のマシンでスケジュールに従って実行するスクリプトを作成しようとしています。

なぜ私はこのStackOverFlowExceptionを取得しているのか分かりませんし、それを取得するために何ができるのですか。

+0

家の中で書かれたプログラムは、DP.exeですか? –

+0

いいえMicrosoftからのものです。私はそれがリモートセッションのメモリ制限であるのだろうかと思います。 winrsrm/config/winrs MaxMemoryPershellを上限に設定しました。それが解決するかどうかがわかります。 – Doug

答えて

0

MaxMemoryPerShellMBは150MBのメモリ使用量に設定されていました。私はこれを増やし、問題を解決しました。私はPowerShellを開き、中に入れてこれを実行するには、次の

のWinRMセットWinRMの/ configに/ winrs '@ {MaxMemoryPerShellMB = "2000"}'

2

問題はスクリプトブロック内の変数にあります。スクリプトブロックがリモートマシン上で実行されるとき、そのリモートマシン上のセッションは、それらの変数が何であるかを知らない。そのためには、スクリプトブロックにパラメータを追加し、それをリモートマシン上で呼び出すときにその値を渡す必要があります。

$scriptBlock = { 
    Param(
     $remoteExportDir, 
     $remoteMachine 
    ) 
    echo Y | .\DP.EXE IMPORT $remoteExportDir 'MicrosoftDynamicsAx' $remoteMachine 
} 

Invoke-Command -ComputerName $remoteMachine -ScriptBlock $scriptBlock -AsJob -ArgumentList $remoteExportDir,$remoteMachine 
関連する問題