You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell如何检测指定启动的程序是否运行并实现关闭?

PowerShell检测程序运行状态与关闭的最优方案

一、检测程序是否运行

1. Get-Process基础检测

直接通过进程名判断程序状态,示例:

$isRunning = Get-Process -Name "targetApp" -ErrorAction SilentlyContinue
if ($isRunning) {
    Write-Host "程序已在运行"
} else {
    Write-Host "程序未运行,启动中..."
    & ".\runProgram.cmd"
}

要点:-Name参数可省略.exe后缀,-ErrorAction SilentlyContinue避免程序未运行时抛出错误。

2. 精准匹配(解决同名进程问题)

如果存在同名但启动参数不同的进程,可结合进程命令行参数做精准过滤:

$targetProcess = Get-CimInstance Win32_Process | Where-Object {
    $_.Name -eq "targetApp.exe" -and $_.CommandLine -like "* -s -c*"
}
if ($targetProcess) {
    Write-Host "符合参数要求的程序实例已运行"
} else {
    & ".\runProgram.cmd"
}

Get-Process的局限:无法直接获取进程的命令行参数,因此需要用Get-CimInstance Win32_Process(WMI的现代替代)来实现精准匹配。

二、关闭程序的方法

优雅关闭(优先推荐)

模拟用户点击关闭按钮,避免强制终止导致数据丢失:

$process = Get-Process -Name "targetApp" -ErrorAction SilentlyContinue
if ($process) {
    $closedSuccessfully = $process.CloseMainWindow()
    if (-not $closedSuccessfully) {
        # 优雅关闭失败时再强制终止
        $process.Kill()
    }
    # 等待进程退出,超时5秒
    $process.WaitForExit(5000)
}

强制终止(仅必要时使用)

直接终止无响应的程序,示例:

Get-Process -Name "targetApp" -ErrorAction SilentlyContinue | Stop-Process -Force

更简洁的写法:

Stop-Process -Name "targetApp" -Force -ErrorAction SilentlyContinue

三、两种方案的整合脚本

方案1:执行任务后关闭程序

# 执行自动化工作流任务
Write-Host "执行工作流任务..."

# 任务完成后关闭程序
$process = Get-Process -Name "targetApp" -ErrorAction SilentlyContinue
if ($process) {
    if (-not $process.CloseMainWindow()) {
        $process.Kill()
    }
    $process.WaitForExit(3000)
}

方案2:启动前检查并按需启动

# 检查带指定参数的进程是否运行
$targetProcess = Get-CimInstance Win32_Process | Where-Object {
    $_.Name -eq "targetApp.exe" -and $_.CommandLine -match "-s\s+-c"
}

if (-not $targetProcess) {
    Write-Host "程序未运行,启动runProgram.cmd..."
    & ".\runProgram.cmd"
    # 可选:等待程序加载完成
    Start-Sleep -Seconds 5
}

# 执行自动化工作流任务
Write-Host "执行工作流任务..."

关键注意事项

  • 进程名要准确:通过任务管理器“详细信息”标签确认进程的真实名称(部分程序的进程名可能与.exe文件名不同)。
  • 权限匹配:如果程序以管理员身份运行,PowerShell脚本也需要管理员权限才能检测/关闭进程。
  • 参数匹配灵活调整:根据runProgram.cmd里的实际参数格式,修改Where-Object中的匹配规则(比如-like或-match)。

内容的提问来源于stack exchange,提问作者me9hanics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:50:17