1

Я пытаюсь использовать Invoke-Command для запуска скриптового блока на удаленной машине.Invoke-command StackOverFlowException

ScriptBlock является:

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

Я бег этого ScriptBlock так:

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

ли DP.exe программа, написанная в доме? –

+0

нет нет от Microsoft. Интересно, это ограничение памяти на удаленном сеансе. Я установил winrsrm/config/winrs MaxMemoryPershell на более высокий лимит. Я посмотрю, решит ли это это. – Doug

ответ

0

Вопрос: MaxMemoryPerShellMB был сконфигурирован для использования памяти 150 МБ. Я увеличил это и решил проблему. Для этого я открыл PowerShell и поставить в:

WinRM набора WinRM/конфигурации/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