powershell:同步停止进程

powershell:同步停止进程,powershell,Powershell,嗯。 我希望停止正在运行的进程,然后仅在进程停止后继续使用脚本 例如:停止media player,然后删除media player数据库(如果您有wmp12,您可能了解原因!) 但脚本的其余部分在应用程序有时间关闭之前开始执行 #stop wmp stop-process -processname wmplayer #delete dir "C:\Users\blergh\AppData\Local\Microsoft\Media Player" -filter *wmdb | foreach

嗯。 我希望停止正在运行的进程,然后仅在进程停止后继续使用脚本

例如:停止media player,然后删除media player数据库(如果您有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未测试,但您可以尝试:

stop-process -processname wmplayer
get-process | where-object {$_.HasExited}

我会这样说:

calc
calc
calc
Stop-Process -Name calc | 
    Foreach { While ($_ -and !$_.HasExited) { Start-Sleep -milli 300 } }
那么:

$wmplayer = get-process wmplayer
stop-process $wmplayer.id
wait-process $wmplayer.id -erroraction:silentlycontinue
请注意,添加了erroraction,以便在进程快速终止时不会出现错误

或者作为更方便的一行:

stop-process -processname wmplayer -passthru| wait-process

我喜欢你的单行程序,但是
停止进程
应该使用
-PassThru
否则它什么也不返回。在第一个示例中
等待进程$wmplayer.id
如果
停止进程
运行得很快,就会出错/失败。