2016-04-18 3 views
0

Я работаю над частью, где мне нужно запустить приложение, и это приложение должно работать в фоновом режиме. Я попробовал Start-Process Командлет, как показано ниже:Пуск-процесс Powershell не запускает процесс на удаленном компьютере

try { 
    Invoke-Command -Session $newsession -Scriptblock { 
     Write-Host "Cd'ing and starting Vesper on" $loadvm 
     Start-Process cmd -ArgumentList "/c C:\vesper_cpt\Vesper.exe -auto" -verb runas 
    } -ErrorAction Stop 
} catch [Exception] { 
    echo "Error while running the remote command", $_.Exception.GetType().FullName, $_.Exception.Message 
    Remove-PSSession $newsession 
    exit 1 
} 

Remove-PSSession $ newsession

Что происходит, что я могу видеть, что он запускает процесс CMD на целевой машине, но затем он сразу же уходит. Я не уверен, что мне делать, чтобы этот процесс работал и работал всегда. С другой стороны, я также попробовал командлет Invoke-Expression, и с этим я вижу, что процесс запущен на удаленной машине, но сценарий powershell никогда не возвращается, и поэтому подумал об использовании Start-Process. Какие-либо предложения?

+0

«Я не уверен, что я должен сделать здесь, чтобы этот процесс и работает всегда» - эхй, установить его в качестве службы на указанном удаленную машину? Если вы хотите устранить неполадки, добавьте '*> C: \ output.log' в строку аргумента и просмотрите файл журнала на удаленном компьютере. –

+0

« C: \ vesper_cpt \ Vesper.exe »- этот файл находится на локальной или удаленной машине ? Вы не можете запускать локальный исполняемый файл на удаленном компьютере. – cezarypiatek

+0

Да, C: \ vesper_cpt \ Vesper.exe - это файл на удаленной машине. Обратите внимание, что приведенный выше код не является полным скриптом. Сначала он создает сеанс с удаленной машиной, а затем запускает выполнение Vesper.exe. Итак, я запускаю приложение Vesper на удаленной машине с помощью powershell – rapport89

ответ

1

После того, как вы попытались так много вещей, как Invoke-Expression, Start-Process, я нашел причину того, почему мой процесс выходил сразу после его запуска на удаленной машине. Причина в том, что приложение, которое я запускаю, является Java-приложением. И JVM не позволяет потоку демона запускать процесс на машине. С другой стороны, если хотя бы один пользовательский поток жив, среда выполнения Java не прекратит ваше приложение.

В моей установке, я бегу приложение на удаленной машине (в данном случае Vesper.exe), так что я создавал New-PSSession, а затем, в конце концов, я был Снятие-PSSession. Из-за этого не было ни одного пользовательского потока, оставшегося для запуска приложения, и из-за этого приложение закрывалось.

Решение это вместо Снятие-PSSession, вы собираетесь сделать Exit-PSSession. Exit-PSSession, сохраняет поток в живых, и ваше приложение не завершается. Позаботьтесь о том, что это будет вашей ответственностью за то, как вы собираетесь выйти из приложения, потому что, даже если ваша программа будет закончена, приложение все равно будет работать на удаленной машине.

try { 
    Invoke-Command -Session $newsession -Scriptblock { 
     Write-Host "Cd'ing and starting Vesper on" $loadvm 
     Start-Process cmd -ArgumentList "/c C:\vesper_cpt\Vesper.exe -auto" -verb runas 
    } -ErrorAction Stop 
} catch [Exception] { 
    echo "Error while running the remote command", $_.Exception.GetType().FullName, $_.Exception.Message 
    Remove-PSSession $newsession 
    exit 1 
} 

Exit-PSSession 

Это до вас, что вы хотите сделать, если исключение попало. Вы можете удалить или выйти из сеанса в соответствии с настройкой вашей среды.

Я нашел ответы от следующих двух вопросов:

Надеется, что это помогает.

Благодаря

Смежные вопросы