Get-Process 是什么
Get-Process 用来列出本机进程并读取它们的属性,返回的是进程对象而不是文本表格。对象里带着名称、编号、线程数与句柄数、工作集内存、累计处理器时间、可执行文件路径、启动时间等字段,因此可以直接排序、过滤、汇总与导出。相比任务管理器的界面,它在远程会话里同样可用,也便于把结果写进脚本做巡检;相比 tasklist,它的优势在于能按属性名精确取数,不受输出列宽与语言影响。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 语法 | Get-Process [[-Name] <名称>] [-Id <编号>] [-IncludeUserName] [-FileVersionInfo] |
| 返回值 | System.Diagnostics.Process 对象,可按属性过滤与排序 |
| 常用属性 | Name、Id、CPU、WorkingSet64、Handles、Threads、Path、StartTime |
| 名称写法 | 可省略 .exe 后缀,也支持通配符;与 -Id 二选一或组合使用 |
| 权限 | 普通用户可查询;用户名列与部分系统进程的路径需要管理员 |
典型使用场景
- 资源排行:按累计处理器时间或工作集内存排序,找出占用最高的进程
- 进程盘点:统计同类进程的实例数量,确认是否有多余副本
- 定位程序:用编号反查进程名与可执行文件路径,配合端口排查
- 巡检采样:定时记录内存与句柄数,观察是否持续增长
- 清理前确认:结束进程之前核实身份与启动时间,避免误杀
- 用户维度排查:启用用户名显示后判断进程由哪个账户启动
常用示例
常用示例
# 按累计 CPU 时间排序取前 10
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU
# 用编号反查进程,带上路径与启动时间
Get-Process -Id 4 | Select-Object Name, Path, StartTime
# 按名称精确查询,支持通配
Get-Process -Name chrome* | Select-Object Name, Id, WS
# 查看由谁启动的进程(需管理员)
Get-Process -IncludeUserName | Where-Object UserName -like *admin*
# 统计同类进程实例数量
(Get-Process -Name w3wp -ErrorAction SilentlyContinue).Count
# 采样两次比较实时占用
$t1 = Get-Process | Select-Object Id, CPU; Start-Sleep 5; $t2 = Get-Process | Select-Object Id, CPU常用属性读法
| 属性 | 含义 | 使用注意 |
|---|---|---|
| Name | 进程名称,通常不含可执行文件后缀 | 同名多实例时会返回多个对象 |
| Id | 进程编号,与端口排查中的编号一致 | 重启后编号会变化,不能长期引用 |
| CPU | 累计处理器时间,单位为秒 | 是历史累计值,比较实时占用需两次采样做差 |
| WorkingSet64 | 当前物理内存工作集,单位为字节 | 换算成兆字节更直观,也便于设阈值 |
| Handles | 打开的句柄数 | 持续增长往往意味着句柄泄漏 |
| Path | 可执行文件路径 | 系统进程可能因权限不足为空值 |
| StartTime | 进程启动时间 | 用来判断是否发生了意外的重启 |
CPU 属性是累计处理器时间而不是瞬时占用率。想比较实时占用,要在间隔若干秒后取两次快照做差值,或直接使用性能计数器,单看一次结果会偏向运行时间长的进程。
查询某个名称的进程失败时默认会报错,批量场景建议加 -ErrorAction SilentlyContinue,并另外判断结果是否为空,避免因为一个名称不存在而中断整段脚本。
路径与用户名两列在普通权限下经常为空,这不是查询失败,而是权限不足导致的属性不可见;需要这些字段时请用管理员会话执行。
按用途选属性
| 排查目标 | 先看属性 | 理由 |
|---|---|---|
| 内存占用偏高 | WorkingSet64 | 反映当前驻留物理内存,比虚拟内存更贴近压力 |
| 疑似句柄泄漏 | Handles | 长期单调增长基本可判定存在泄漏 |
| CPU 持续走高 | CPU 与采样差值 | 累计值必须做差才有实时意义 |
| 程序来源不明 | Path | 可确定可执行文件位置,识别非预期副本 |
| 异常重启判断 | StartTime | 启动时间与系统事件表比对可确认重启 |
| 实例数量异常 | 按名称计数 | 多个同名实例会造成资源争抢 |