Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

1
Не в сети
Сообщений: 3
Благодарностей: 0
Предупреждений:
Из:
Род занятий:

Есть такой кусок кода в пауэршелле:

$application = "C:\Program Files\7-zip\7z.exe"
$arguments = "a -tzip C:\xls.zip -r C:\results\xls\*.*"
$process = [Diagnostics.Process]::Start($application, $arguments)
do { } while (!$process.HasExited)
Copy-Item C:\xls.zip D:\backup\xls.zip"


Здесь запускается консольная тулза с параметрами, после чего в цикле ждем, когда процесс закончится, чтобы скопировать результат куда-либо. Ждать конца процесса необходимо, т.к. в ином случае копировать нам будет нечего.

вопрос: есть ли какой-то более красивый способ запустить консольную тулзу и продолжить выполнение скрипта после окончания процесса архивирования, но так чтобы обойтись без цикла. Мне кажется, должен быть более изящный способ.

#187839   | 05.01.10 21:08
Не в сети
Сообщений: 2109
Благодарностей: 298
Предупреждений:
Из: Russia Екатеринбург
Род занятий: IT

severin, используйте jobs: get-help about_jobs

#187850   | 06.01.10 08:19
Не в сети
Сообщений: 3
Благодарностей: 0
Предупреждений:
Из:
Род занятий:

Lico :
severin, используйте jobs: get-help about_jobs


Спасибо за ответ.
Но jobs - это не совсем то, что мне нужно. Оно не запускает конкретные софтины в командной строке, как я понял. Хотя там тоже есть start-job и wait-job. То есть я не нашел там примеров запуска каких-либо тулзей через start-job, а только ps1-скриптов. Хотя неплохо было бы разжиться таким примерчиком, если он есть.
То, что было найдено - это System.Diagnostics.Process.WaitForExit() - дотнетовский класс.
И теперь вместо этого:
$process = [Diagnostics.Process]::Start($application, $arguments)
do { } while (!$process.HasExited)


пишу это:
$process = [Diagnostics.Process]::Start($application, $arguments)
$process.WaitForExit()


Такая лаконичная конструкция тоже работает:
[Diagnostics.Process]::Start($application, $arguments).WaitForExit()

Взято здесь:
http://blogs.msdn.com/powershell/archive/2007/01/16/managing-processes-in-powershell.aspx

Кто еще что знает, делитесь опытом, и желательно с конкретными примерами.

#187858   | 06.01.10 13:02
Не в сети
Сообщений: 3
Благодарностей: 0
Предупреждений:
Из:
Род занятий:

и что характерно, сам пауэршелл при этом потребляет процессорное время во время ожидания конца архивирования (судя по таскменеджеру). Вот это непонятно.

#188192   | 14.01.10 10:07
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.028 секунд (Общее время SQL: 0.009 секунд - SQL запросов: 64 - Среднее время SQL: 0.00015 секунд))
Top.Mail.Ru