首页/系统/Windows 运维速查/CIM/WMI 查询进程(Win32_Process)

CIM/WMI 查询进程(Win32_Process)

通过 CIM 类查询进程:能拿到命令行、父进程、用户等 Get-Process 没有的信息。

Windows 运维速查系统更新于 2026-10-13

用 CIM 查进程

通过 CIM 接口查询进程,能拿到常规进程命令没有的信息,例如完整启动命令行、父进程号、可执行路径与所属用户。排查“端口被谁占了”“这个进程是被谁拉起来的”时,命令行字段往往比进程名有用得多。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7
推荐写法Get-CimInstance,旧式的 Get-WmiObject 在新版本已不推荐
常用类Win32_Process 进程、Win32_Service 服务、Win32_OperatingSystem 系统信息
关键字段ProcessId、ParentProcessId、CommandLine、ExecutablePath
过滤写法-Filter 使用 WQL 语法,与 PowerShell 语法不一致
远程查询-ComputerName 需要相应权限与管理通道就绪

典型使用场景

  • 按命令行关键字找进程,例如找出带某个参数启动的服务
  • 查父进程号,理清进程树与是谁把它拉起来的
  • 定位监听端口的归属进程,再查它的完整命令行
  • 批量巡检多台机器上的进程并汇总导出
  • 排查可疑进程:确认可执行路径与启动参数是否正常

常用示例

常用示例
# 按名称过滤,看命令行与父进程
Get-CimInstance Win32_Process -Filter "Name='w3wp.exe'" | Select-Object ProcessId, ParentProcessId, CommandLine
# 按命令行关键字搜索
Get-CimInstance Win32_Process | Where-Object CommandLine -like '*--port 8080*' | Select-Object ProcessId, Name, CommandLine
# 结合监听端口找归属进程,注意别用内置的自动变量名
$owner = (Get-NetTCPConnection -LocalPort 8080 -State Listen).OwningProcess
Get-CimInstance Win32_Process -Filter "ProcessId=$owner" | Select-Object ProcessId, Name, CommandLine

常用类与字段

类或字段含义用途
Win32_Process进程类查询命令行与父子关系
CommandLine完整启动命令行定位参数与端口等配置
ParentProcessId父进程号追溯是谁拉起了它
Win32_Service服务类查服务路径与状态
Win32_OperatingSystem系统信息类查内存总量与系统版本
-Filter 使用 WQL 语法,字符串常量要写在单引号里,转义规则与 PowerShell 不同。不确定写法时可以先取全量再管道过滤,但数据量大的时候性能会明显下降。
全量枚举进程并读取命令行有实际开销,机器繁忙时更明显。尽量先用 -Filter 把范围缩小,再对结果做二次筛选。

易错点

  • 把 WQL 的过滤写法与 PowerShell 语法混用会直接报错,WQL 里字符串常量必须用单引号
  • 不加过滤全量枚举命令行开销较大,忙时会拖慢机器,应先缩小范围
  • 远程查询依赖权限与管理通道就绪,未预先配置会报拒绝访问
  • 用内置的自动变量名存放进程号会与系统变量冲突,脚本里要换用其他名称
  • 进程可能在查询瞬间退出,拿到的命令行与端口归属可能对不上,需要重复确认一次

数据来源与参考

  • Microsoft Learn:Get-CimInstance
  • Microsoft Learn:Win32_Process 类

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌