Invoke-command StackOverFlowException

时间:2016-11-18 19:03:56

标签: powershell powershell-v2.0 dynamics-ax-2012 invoke-command

我正在尝试使用Invoke-Command在远程计算机上运行脚本块。

脚本块是:

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

我像这样运行这个脚本块:

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

我运行它,我可以看到它在远程机器上执行进程。此命令在本地运行大约需要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以及我能做些什么来实现它。

2 个答案:

答案 0 :(得分:2)

问题在于您的scriptblock中的变量。当在远程机器上执行scriptblock时,该远程机器上的会话不知道这些变量是什么。为了处理这个问题,您需要在scriptblock中添加参数,然后在远程计算机上调用它时将值传递给它。

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

Invoke-Command -ComputerName $remoteMachine -ScriptBlock $scriptBlock -AsJob -ArgumentList $remoteExportDir,$remoteMachine

答案 1 :(得分:1)

问题是MaxMemoryPerShellMB配置为150mb的内存使用量。我增加了它,它解决了这个问题。为此,我打开了powershell并输入:

winrm set winrm / config / winrs'@ {MaxMemoryPerShellMB =“2000”}'