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

如何在PowerShell中查询所有非运行状态的应用进程名称

PowerShell查询未运行应用进程名的实现方法

你当前使用的Get-Process | Select-Object Name只能获取当前系统正在运行的进程列表,Windows没有内置全局的「所有可运行应用进程名」的标准库,所以要实现需求,你需要先有一份待检测的目标进程名清单,再和当前运行的进程做对比取差集。

基础实现步骤

  • 第一步:定义你需要检测的目标进程名清单
    示例代码:
    # 自定义要检测的进程名,替换成你需要的应用进程名即可
    $targetProcessNames = @("WeChat", "QQ", "chrome", "notepad", "explorer")
    
  • 第二步:获取当前正在运行的去重进程名列表
    $runningProcesses = (Get-Process).Name | Select-Object -Unique
    
  • 第三步:过滤出不在运行列表中的进程(即非活动进程)
    $inactiveProcesses = $targetProcessNames | Where-Object { $_ -notin $runningProcesses }
    # 输出结果
    $inactiveProcesses
    

自动生成已安装应用进程清单(可选)

如果你不想手动整理清单,可以用以下代码从系统开始菜单的快捷方式中自动提取已安装应用对应的进程名:

# 读取所有用户和当前用户的开始菜单快捷方式
$shortcutPaths = @(
    "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\*.lnk"
    "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\*.lnk"
)

$targetProcessNames = Get-ChildItem -Path $shortcutPaths -Recurse -Filter *.lnk | ForEach-Object {
    $wshell = New-Object -ComObject WScript.Shell
    $targetExePath = $wshell.CreateShortcut($_.FullName).TargetPath
    # 仅提取exe格式的主程序进程名
    if ($targetExePath -match '\.exe$') {
        [System.IO.Path]::GetFileNameWithoutExtension($targetExePath)
    }
} | Select-Object -Unique

拿到自动生成的$targetProcessNames后,再运行前面的差集过滤代码即可得到未运行的应用进程名。

注意事项

  • 部分多进程架构的应用,启动后的实际运行进程名和快捷方式指向的主程序名可能不一致,这类应用需要手动把实际运行的进程名加入清单
  • 自动生成的清单会包含系统内置组件的进程名,如果只需要排查第三方应用,可以手动过滤掉不需要的项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:27:03