powershell – 如何确保给定进程不运行,如果是,则终止脚本

我有一个脚本,我停止(杀死)一个过程.紧接着,我想要一些代码检查进程是否确实停止了,如果没有,退出脚本(如果它确实停止了,脚本当然会继续.)这是我试图这样做的方法:

if (Get-Process "notepad" -ErrorAction SilentlyContinue) {
    Write-Host "Program still running somehow, terminating script..."
    exit
}
else
{ Write-Host "Program stopped." }

我以为我已经知道如果有一个或多个进程正在运行(即返回输出),语句(Get-Process“progname”-ErrorAction SilentlyContinue)将eval为$true,如果没有返回输出则返回$false (我指定-ErrorAction SilentlyContinue以确保在没有找到该名称的程序时返回没有输出.)当我使用正在运行的程序(例如“notepad”)运行此代码块时,它可用于测试,并且当我尝试一个不存在的程序时(比如说“notepadxxx”).

但是,当我将它集成到我的大型程序中时,将其放在终止程序的行之后,如下:

Write-Host "Terminating Program..."
Stop-Process -Name "notepad" -Force
if (Get-Process "notepad" -ErrorAction SilentlyContinue) {
    Write-Host "Program still running somehow, terminating script..."
    exit
}
else
{ Write-Host "Program stopped." }

Get-Process行变为$true,并结束脚本.这只是Stop-Process系列和后续Get-Process系列之间的竞争条件,还是一个逻辑缺陷? (如果是的话,有什么问题?)

最佳答案
尝试使用if条件:

if (Get-Process "notepad" -ErrorAction SilentlyContinue | Where-Object {-not $_.HasExited }) 

转载注明原文:powershell – 如何确保给定进程不运行,如果是,则终止脚本 - 代码日志