2016-02-22 2 views
-1

Я пытаюсь преобразовать эти окна .BAT файла (который работает сетевой код приложения & сервера Client) в Powershell:Как преобразовать этот пакетный файл Windows в эквивалентный сценарий Powershell?

Вот моя летучая мышь файл:

@echo off 
setlocal 


start cmd 

start java FixedMessageSequenceServer 

ping 192.0.2.2 -n 1 -w 5000 > null 

start /wait java FixedMessageSequenceClient 

if errorlevel 1 goto retry 

echo Finished successfully 
exit 

:retry 
echo retrying... 
start /wait java BatchWakeMeUpSomehow 

Вот мой файл Powershell:

Start-Job -ScriptBlock { 
    & java FixedMessageSequenceServer 
    Start-Sleep -s 1 
    & java FixedMessageSequenceClient 
} 




Start-Sleep -s 1 

Но когда я пытаюсь запустить, он не выводит правильно или ничего не делает. Я также не уверен, как конвертировать start /wait.

+0

@Mofi - Я хочу, чтобы как сервер, так и клиент записывали в одно окно, вместо того, чтобы иметь выход в два отдельных окна CMD. Затем мне нужно заставить отключить это одно окно (оно содержит как серверные, так и клиентские сообщения), а затем автоматически перезапустить его ([см. Этот вопрос] (http://stackoverflow.com/questions/33762588/how-do- i-use-one-java-program-to-monitor-another-java-programs-output)) – Coffee

ответ

2

start внешний оператор вызова в CMD примерно эквивалентно Start-Process (псевдоним) start в PowerShell - это даже имеет параметр -Wait.

Start-Job с другой стороны запускает ваш скрипт в фоновом режиме.

Start-Process java FixedMessageSequenceServer 
Start-Sleep -Seconds 1 
$JavaClient = Start-Process java FixedMessageSequenceClient -Wait -PassThru 

if($JavaClient.ExitCode) 
{ 
    # exit code is non-zero, better retry 
    Start-Process java BatchWakeMeUpSomehow -Wait 
} 
+0

AFAIK, 'Start-Process' не обновляет переменную' $ LASTEXITCODE', поэтому вы должны использовать '-PassThru' и проверьте свойство 'ExitCode' возвращаемого объекта' Process'. – PetSerAl

+0

@PetSerAl Хороший звонок, обновленный ответ –

+0

Итак, я побежал, но это не так, как я хочу. Я бы хотел набрать 'CTRL + C', чтобы убить пару клиент-сервер, пока они оба работают, а затем перезапустите. Любопытно, что это за флаг '-Wait'? – Coffee