Создание пакетных заданий в PowerShell - PullRequest
5 голосов
/ 08 сентября 2008

Представьте себе файл .cmd в стиле DOS, который используется для запуска взаимозависимых оконных приложений в правильном порядке.

Пример:
1) Запустите приложение сервера, вызвав exe с параметрами.
2) Дождитесь инициализации сервера (или фиксированного промежутка времени).
3) Запустите клиентское приложение, вызвав exe с параметрами.

Какой самый простой способ выполнить пакетную работу такого типа в PowerShell?

Ответы [ 3 ]

5 голосов
/ 08 сентября 2008

Помните, что PowerShell может обращаться к объектам .Net. Start-Sleep, предложенный Blair Conrad , можно заменить вызовом WaitForInputIdle серверного процесса, чтобы вы знали, когда сервер готов, до запуска клиента.

$sp = get-process server-application
$sp.WaitForInputIdle()

Вы также можете использовать Process.Start , чтобы запустить процесс и вернуть ему точный процесс. Тогда вам не нужен процесс get.

$sp = [diagnostics.process]::start("server-application", "params")
$sp.WaitForInputIdle()
$cp = [diagnostics.process]::start("client-application", "params")
1 голос
/ 08 сентября 2008

@ Ларс Труйенс предложил

Помните, что PowerShell может получить доступ .Net объекты. Старт-Сон как предложенный Блэр Конрад может быть заменяется вызовом WaitForInputIdle серверного процесса, чтобы вы знали, когда сервер готов перед запуском клиент.

Это более элегантно, чем спать в течение фиксированного (или заданного параметром) промежутка времени. Тем не мение, WaitForInputIdle

применяется только к процессам с пользователем интерфейс и, следовательно, сообщение цикл.

, поэтому это может не сработать, в зависимости от характеристик запуска-сервера-приложения. Однако, как указал мне Ларс, вопрос касался оконного приложения (которое я пропустил, когда читал вопрос), поэтому его решение, вероятно, является лучшим.

0 голосов
/ 08 сентября 2008

Чтобы подождать 10 секунд между запуском приложений, попробуйте

launch-server-application serverparam1 serverparam2 ...
Start-Sleep -s 10
launch-client-application clientparam1 clientparam2 clientparam3 ...

Если вы хотите создать скрипт и передать аргументы, создайте файл runlinkedapps.ps1 (или любой другой) с таким содержимым:

launch-server-application $args[0] $args[1]
Start-Sleep -s 10
launch-client-application $args[2] $args[3] $args[4]

Или же вы хотите распределить параметры сервера и клиента в строке, которую вы используете для запуска runlinkedapps.ps1. Если хотите, вы можете даже указать здесь задержку вместо жесткого кодирования 10.

Помните, что ваш файл .ps1 должен находиться на вашем пути, или вы должны будете указать его местоположение при запуске. (О, и я предположил, что launch-server-application и launch-client-application находятся на вашем пути - если нет, вам также потребуется указать полный путь к ним.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...