关闭指定进程后PowerShell保活脚本仍无法停止的问题求助
修复PowerShell窗口保活脚本:关闭指定进程后自动停止
原脚本的问题在于仅在启动时检查一次Outlook进程状态,进入循环后不会重新验证,导致Outlook关闭后,脚本仍会继续执行保活逻辑。
修复要点
- 在循环内部定期重新检查Outlook进程是否存在
- 同步检查目标进程(记事本)的状态,避免目标进程关闭后触发错误
- 检测到Outlook进程消失时,立即终止脚本
修复后的完整脚本
# 目标保活进程(记事本) $targetProcName = "notepad" # 触发保活的依赖进程(Outlook) $triggerProcName = "Outlook" # 初始检查:如果依赖进程未运行,直接退出 if (-not (Get-Process -Name $triggerProcName -ErrorAction SilentlyContinue)) { Write-Host "依赖进程未运行,退出脚本" Exit } Write-Host "开始维持目标进程活跃" while ($true) { # 每次循环先重新检查依赖进程状态 $triggerProc = Get-Process -Name $triggerProcName -ErrorAction SilentlyContinue if (-not $triggerProc) { Write-Host "依赖进程已关闭,终止脚本" Exit } # 检查目标进程是否仍在运行 $targetProc = Get-Process -Name $targetProcName -ErrorAction SilentlyContinue if ($targetProc) { # 休眠9分钟(提前1分钟触发激活,避免10分钟无操作登出) Start-Sleep -Seconds 540 # 激活目标窗口 Add-Type -AssemblyName Microsoft.VisualBasic [Microsoft.VisualBasic.Interaction]::AppActivate($targetProc.Id) Write-Host "已激活目标窗口" } else { Write-Host "目标进程已关闭,等待重新启动..." Start-Sleep -Seconds 60 } }
关键改进说明
- 将进程名定义为变量,便于后续修改维护
- 循环内部每次都重新获取最新的进程状态,确保依赖进程关闭时能及时检测到
- 增加目标进程状态检查,避免目标进程关闭后执行激活操作引发错误
- 目标进程关闭时,脚本会进入等待轮询状态,而非直接退出(如果不需要此逻辑,可改为直接Exit)
内容的提问来源于stack exchange,提问作者code0
相关产品推荐
相关产品推荐

