powershell: синхронный останов-процесс - PullRequest
2 голосов
/ 05 ноября 2010

ки. Я хочу остановить запущенный процесс, а затем продолжить выполнение сценария только после остановки процесса.

например: остановите медиаплеер и затем удалите базу данных медиаплеера (если у вас есть wmp12, вы можете понять причину! Но остальная часть сценария начинает выполняться до того, как приложение успевает завершить работу.

#stop wmp
stop-process -processname wmplayer
#delete
dir "C:\Users\blergh\AppData\Local\Microsoft\Media Player" -filter *wmdb | foreach { del $_.fullname}

И я получаю:

Remove-Item : Cannot remove item C:\Users\blergh\AppData\Local\Microsoft\Media Player\CurrentDatabase_372.wmdb: The proces
s cannot access the file 'C:\Users\blergh\AppData\Local\Microsoft\Media Player\CurrentDatabase_372.wmdb' because it is bei
ng used by another process.

Могу ли я заставить это работать синхронно?

Спасибо, P

Ответы [ 3 ]

5 голосов
/ 05 ноября 2010

Как насчет:

$wmplayer = get-process wmplayer
stop-process $wmplayer.id
wait-process $wmplayer.id -erroraction:silentlycontinue

Обратите внимание, что ошибка добавлена, поэтому вы не получите сообщение об ошибке, если процесс будет быстро завершен,

или как более удобный однострочник:

stop-process -processname wmplayer -passthru| wait-process
0 голосов
/ 05 ноября 2010

Я бы пошел с чем-то вроде этого:

calc
calc
calc
Stop-Process -Name calc | 
    Foreach { While ($_ -and !$_.HasExited) { Start-Sleep -milli 300 } }
0 голосов
/ 05 ноября 2010

Не проверено, но вы можете попробовать:

stop-process -processname wmplayer
get-process | where-object {$_.HasExited}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...