系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

Get-Process

查看进程的 CPU、内存、句柄和响应状态,输出可计算、可筛选的进程对象。

补充说明

Get-Process 返回 System.Diagnostics.Process 对象,包含 Id、ProcessName、WorkingSet64、CPU、Responding、StartTime、Path 等属性;常见别名是 gps 和 ps。它不是 tasklist 的文本快照,WorkingSet64 以字节为单位,可以直接排序、求和或换算。

管道:-Name、-Id 可按属性名接收字符串或整数,不接受 Process 对象回灌;对结果再筛选用 Where-Object,把结果交给 Stop-Process 则按对象或 Id 绑定。权限:标准用户可以枚举进程名、ID 和基本内存信息;-IncludeUserName、-Module,以及其他用户进程的 Path、StartTime 通常需要管理员权限。

边界:同名进程可能有多个实例,单看名称无法定位;CPU 是进程启动以来累计的处理器秒数,不是当前占用率。版本:5.1 仅 Windows;7.x 跨平台,Unix 上进程对象属性和部分参数不同,-IncludeUserName 等 Windows 专有行为不能照搬。

常用示例

# 1. 找内存占用最高的 5 个进程,并换算成 MB
PS C:\> Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 5 Name, Id, @{n='MB';e={[math]::Round($_.WorkingSet64/1MB,1)}}

# 2. 按名称查所有实例,附带 CPU 累计秒数和启动时间
PS C:\> Get-Process -Name chrome -ErrorAction SilentlyContinue | Select-Object Id, CPU, StartTime

# 3. 找无响应的 GUI 进程,先确认再决定是否结束
PS C:\> Get-Process | Where-Object { -not $_.Responding } | Select-Object Name, Id, Responding

# 4. 查看当前 PowerShell 进程的路径和启动时间
PS C:\> Get-Process -Id $PID | Format-List Name, Id, Path, StartTime

# 5. 按会话统计 svchost 实例,理解一个进程可承载多个服务
PS C:\> Get-Process svchost | Group-Object SessionId | Select-Object Name, Count

# 6. 按累计 CPU 时间排序,定位长期占用的进程
PS C:\> Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. Get-Process 的 CPU 属性能直接当作当前 CPU 占用率吗?
  2. 同名进程有多个实例时,怎样安全地只结束其中一个?
  3. 标准用户为什么可能读不到其他用户进程的 Path?
答案
  1. 不能;它是进程启动以来累计的处理器秒数,需要间隔采样换算成占用率。
  2. 先按 Id、StartTime、Path 确认目标实例,再 Stop-Process -Id;不要直接用 -Name 结束全部。
  3. 读取其他用户进程的路径、模块等信息需要更高权限,普通用户会得到空值或拒绝访问。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令