我正在尝试使用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以及我能做些什么来实现它。
答案 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”}'