调用命令 StackOverFlowException

Invoke-command StackOverFlowException

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

脚本块是:

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

我运行这个脚本块是这样的:

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

我 运行 这个,我可以看到它在远程机器上执行进程。此命令在本地 运行 大约需要 40-50 分钟。当我像这样远程操作时,它只需要 运行s 大约 25 分钟。

查看状态,它说它已完成且没有错误,但 DP.exe 生成了一个日志文件,但它没有生成。当我查看作业的输出时,我发现它失败并显示以下消息:

+ 类别信息:未指定:(:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

进程因 WhosebugException 而终止。

进程因 WhosebugException 而终止。

DP.EXE 是一个用于将数据导入 Microsoft Dynamics AX 2012 测试环境的应用程序。如果我只是 运行 在计算机本地执行此命令,则此命令可以正常工作。我正在尝试按计划在一系列 5 台以上的机器上为 运行 这个命令编写一个脚本。

我不确定为什么会收到此 WhosebugException 以及我可以做些什么来解决它。

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

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

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

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

winrm 设置 winrm/config/winrs '@{MaxMemoryPerShellMB="2000"}'