Get-Process
获取在本地计算机上运行的进程。
语法
Name (默认值)
Get-Process
[[-Name] <String[]>]
[-Module]
[-FileVersionInfo]
[<CommonParameters>]
NameWithUserName
Get-Process
[[-Name] <String[]>]
-IncludeUserName
[<CommonParameters>]
Id
Get-Process
-Id <Int32[]>
[-Module]
[-FileVersionInfo]
[<CommonParameters>]
IdWithUserName
Get-Process
-Id <Int32[]>
-IncludeUserName
[<CommonParameters>]
InputObject
Get-Process
-InputObject <Process[]>
[-Module]
[-FileVersionInfo]
[<CommonParameters>]
InputObjectWithUserName
Get-Process
-InputObject <Process[]>
-IncludeUserName
[<CommonParameters>]
说明
Get-Process
cmdlet 获取本地计算机上的进程。
如果没有参数,此 cmdlet 将获取本地计算机上的所有进程。 还可以通过进程名称或进程 ID(PID)或将此 cmdlet 的 System.Diagnostics.Process 对象管道指定特定进程。
默认情况下,此 cmdlet 返回一个 Process 对象,该对象包含有关进程的详细信息,并支持允许你控制它的方法。 使用参数,可以更改此 cmdlet 返回的信息类型。
- 模块:检索加载到进程中的每个模块的信息。
- FileVersionInfo:检索进程主模块的文件版本信息。
注释
模块是加载到进程的可执行文件或动态链接库(DLL)。 进程具有一个或多个模块。 主模块是用于最初启动过程的模块。 有关详细信息,请参阅 ProcessModule 类。
示例
示例 1:获取本地计算机上所有正在运行的进程的列表
Get-Process
此命令获取本地计算机上所有正在运行的进程的列表。 有关每个显示列的定义,请参阅 NOTES 部分。
若要查看 Process 对象的所有属性,请使用 Get-Process | Get-Member
。 默认情况下,PowerShell 使用单位(例如千字节(K)和兆字节(M)显示某些属性值。 使用成员访问运算符 (.
) 进行访问时的实际值(以字节为单位)。
示例 2:显示有关一个或多个进程的详细信息
Get-Process winword, explorer | Format-List *
此管道显示计算机上有关 winword
和 explorer
进程的详细信息。 它使用 Name 参数来指定进程,但它省略可选参数名称。 管道运算符 (|
) 将 Process 对象 Format-List
传递给 cmdlet,该 cmdlet 显示所有可用属性 (*
) 及其每个对象的值。
还可以按进程 ID 标识进程。 例如:Get-Process -Id 664, 2060
。
示例 3:获取工作集大于指定大小的所有进程
Get-Process | Where-Object { $_.WorkingSet -gt 20971520 }
Get-Process | Where-Object WorkingSet -GT 20MB
该 Get-Process
cmdlet 返回正在运行的进程。 输出通过管道传递给 Where-Object
cmdlet,该 cmdlet 选择工作 集 值大于 20,971,520 字节的对象。
在第一个示例中,Where-Object
使用脚本块比较每个 Process 对象的 WorkingSet 属性。 第二个示例中, Where-Object
cmdlet 使用简化的语法来比较 WorkingSet 属性。 在这种情况下, -GT
是参数,而不是比较运算符。 第二个示例还使用 数字文本后缀 作为简明的 20971520
替代方法。 在 PowerShell 中, MB
表示一个 mebibyte (MiB) 乘数。
20MB
等于 20,971,520 字节。
示例 4:基于优先级在组中显示计算机上的进程
$processes = Get-Process
$processes | Sort-Object { $_.PriorityClass } | Format-Table -View Priority
这些命令根据优先级 类在组中显示计算机上的进程。 第一个命令获取计算机上的所有进程,并将其存储在变量中 $processes
。
第二个命令通过管道将变量Sort-Object
中$processes
存储的进程对象传递给 cmdlet,然后Format-Table
传递给 cmdlet,该 cmdlet 使用 Priority 视图格式化进程。
示例 5:将属性添加到默认的“Get-Process”输出显示
Get-Process -Name pwsh | Format-Table -Property @(
@{ Name = 'NPM(K)'; Expression = { [int] ($_.NPM / 1KB) } }
@{ Name = 'PM(M)'; Expression = { [int] ($_.PM / 1MB) } }
@{ Name = 'WS(M)'; Expression = { [int] ($_.WS / 1MB) } }
@{ Name = 'CPU(s)'; Expression = { if ($_.CPU) { $_.CPU.ToString('N') } } }
'Id'
@{ Name = 'SI'; Expression = 'SessionId' }
'ProcessName'
'StartTime'
) -AutoSize
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName StartTime
------ ----- ----- ------ -- -- ----------- ---------
84 46 79 18.297 3188 1 pwsh 4/14/2025 10:40:10 AM
66 30 90 4.328 4640 1 pwsh 4/13/2025 3:33:50 PM
66 30 90 4.516 9204 1 pwsh 4/14/2025 9:54:27 AM
此示例从本地计算机检索进程,并将每个 Process 对象通过管道传递给 Format-Table
cmdlet。
Format-Table
使用属性名称和计算属性混合重新创建 Process 对象的默认输出显示。 该显示器包括默认显示中不存在的其他 StartTime 属性。
示例 6:获取进程的版本信息
Get-Process -Name pwsh -FileVersionInfo
ProductVersion FileVersion FileName
-------------- ----------- --------
7.5.0 SHA: 99da… 7.5.0.500 C:\Program Files\PowerShell\7\pwsh.exe
此命令使用 FileVersionInfo 参数获取进程的主模块 pwsh
的文件版本信息。 主模块是用于启动进程的文件,在本例中为 pwsh.exe
。
若要将此命令用于在 Windows Vista 和更高版本的 Windows 上不拥有的进程,必须使用提升的用户权限(以管理员身份运行)运行 PowerShell。
示例 7:获取使用指定进程加载的模块
Get-Process -Name SQL* -Module
此命令使用 Module 参数获取所有进程加载的模块,其名称以开头 SQL
。
若要将此命令用于在 Windows Vista 和更高版本的 Windows 上不拥有的进程,必须使用提升的用户权限(以管理员身份运行)运行 PowerShell。
示例 8:查找进程的所有者
Get-Process -Name pwsh -IncludeUserName
WS(M) CPU(s) Id UserName ProcessName
----- ------ -- -------- -----------
46.53 21.70 3188 DOMAIN01\user01 pwsh
Get-CimInstance -ClassName Win32_Process -Filter "name='pwsh.exe'" |
Invoke-CimMethod -MethodName GetOwner
Domain ReturnValue User PSComputerName
------ ----------- ---- --------------
DOMAIN01 0 user01
第一个命令演示如何获取进程的所有者。 输出显示所有者 DOMAIN01\user01
。
第二个管道显示了使用和Invoke-CimMethod
获取进程Get-CimInstance
所有者的不同方法。 具有筛选器 的 Win32_Process 类检索 pwsh
进程,调用 GetOwner()
的方法返回有关进程的 域 和 用户的信息。 此方法仅在 Windows 上可用,不需要提升的用户权限。
示例 9:使用自动变量标识托管当前会话的进程
Get-Process -Name pwsh
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
83 96.21 105.95 4.33 1192 10 pwsh
79 83.81 117.61 2.16 10580 10 pwsh
Get-Process -Id $PID
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
83 96.21 77.53 4.39 1192 10 pwsh
这些命令演示如何使用 $PID
自动变量来标识托管当前 PowerShell 会话的进程。 可以使用此方法将主机进程与你可能想要控制的其他 pwsh
进程区分开来。
第一个命令获取运行的所有 pwsh
进程。 第二个命令获取 pwsh
承载当前会话的进程。
示例 10:获取具有主窗口标题的所有进程,并将其显示在表中
Get-Process |
Where-Object -Property MainWindowTitle |
Format-Table -Property Id, Name, MainWindowTitle -AutoSize
此管道获取具有主窗口标题的所有进程,并在具有进程 ID 和名称的表中显示它们。
MainWindowTitle 是 Diagnostics.Process 对象类型 Get-Process
返回的许多有用属性之一。 若要查看所有属性,请使用 Get-Process | Get-Member
。
参数
-FileVersionInfo
指示此 cmdlet 获取进程中运行的程序的文件版本信息。
在 Windows Vista 和更高版本的 Windows 上,必须使用提升的用户权限(以管理员身份运行)运行 PowerShell,才能在你不拥有的进程上使用此参数。
使用此参数与访问每个 Process 对象的 MainModule.FileVersionInfo 属性相同。 使用此参数时, Get-Process
返回 FileVersionInfo 对象,而不是 Process 对象。 不能通过管道将使用此参数生成的输出传递给需要 Process 对象的 cmdlet,例如 Stop-Process
。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
别名: | FV, FVI |
参数集
Name
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
Id
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
InputObject
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Id
按进程 ID 指定一个或多个进程(PID)。 可以指定用逗号分隔的多个 ID。 若要获取进程的 PID,请使用 Get-Process
。 若要获取当前 PowerShell 会话的 PID,请使用 $PID
。
参数属性
类型: | Int32[] |
默认值: | None |
支持通配符: | False |
不显示: | False |
别名: | PID |
参数集
Id
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
IdWithUserName
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
-IncludeUserName
指示此命令向每个返回的 Process 对象添加一个 UserName 属性。
参数属性
类型: | SwitchParameter |
默认值: | None |
支持通配符: | False |
不显示: | False |
参数集
NameWithUserName
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
IdWithUserName
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
InputObjectWithUserName
Position: | Named |
必需: | True |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-InputObject
指定一个或多个 Process 对象。 使用包含对象的变量,或获取对象的命令或表达式。
参数属性
类型: | Process[] |
默认值: | None |
支持通配符: | False |
不显示: | False |
参数集
InputObject
Position: | Named |
必需: | True |
来自管道的值: | True |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
InputObjectWithUserName
Position: | Named |
必需: | True |
来自管道的值: | True |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Module
指示此 cmdlet 获取进程已加载的模块。
在 Windows Vista 和更高版本的 Windows 上,必须使用提升的用户权限(以管理员身份运行)运行 PowerShell,才能在你不拥有的进程上使用此参数。
使用此参数与访问每个 Process 对象的 Modules 属性相同。
使用此参数时, Get-Process
返回 ProcessModule 对象,而不是 Process 对象。 不能通过管道将使用此参数生成的输出传递给需要 Process 对象的 cmdlet,例如 Stop-Process
。
结合使用 Module 和 FileVersionInfo 参数时,此 cmdlet 将返回 FileVersionInfo 对象,其中包含所有模块的文件版本的相关信息。
参数属性
类型: | SwitchParameter |
默认值: | False |
支持通配符: | False |
不显示: | False |
参数集
Name
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
Id
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
InputObject
Position: | Named |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | False |
来自剩余参数的值: | False |
-Name
按进程名称指定一个或多个进程。 可以指定以逗号分隔的多个进程名称,并使用通配符。 使用 -Name
参数是可选的。
参数属性
类型: | String[] |
默认值: | None |
支持通配符: | True |
不显示: | False |
别名: | ProcessName |
参数集
Name
Position: | 0 |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
NameWithUserName
Position: | 0 |
必需: | False |
来自管道的值: | False |
来自管道的值(按属性名称): | True |
来自剩余参数的值: | False |
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。
输入
Process
可以通过管道将 Process 对象传递给此 cmdlet。
输出
Process
默认情况下,此 cmdlet 返回 System.Diagnostics.Process 对象。
FileVersionInfo
如果使用 FileVersionInfo 参数,此 cmdlet 将返回 System.Diagnostics.FileVersionInfo 对象。
ProcessModule
如果使用 Module 参数,而不使用 FileVersionInfo 参数,则此 cmdlet 将返回 System.Diagnostics.ProcessModule 对象。
备注
PowerShell 包含以下与 Get-Process
相关的别名:
- 所有平台:
gps
- 窗户:
ps
在运行 64 位 Windows 的计算机上,64 位版本的 PowerShell 获取主模块和 64 位进程模块。 32 位版本的 PowerShell 仅获取 32 位进程模块。
警告
用于Get-Process
在 32 位版本的 PowerShell 中获取 64 位进程时,返回的进程对象等Path
MainModule
属性是$null
。 必须使用 64 位版本的 PowerShell 或 Win32_Process 类。
若要从远程计算机获取进程信息,请使用 Invoke-Command
cmdlet。 有关详细信息,请参阅 Invoke-Command。
在 Windows 上,可以使用 PowerShell 中的 Windows Management Instrumentation (WMI) Win32_Process 类作为替代方法 Get-Process
。 有关详细信息,请参见:
Process 对象的默认显示是包含下列列的表视图。
- NPM(K):进程正在使用的非分页内存量(以 KB 为单位)。
- PM(M):进程正在使用的可分页内存量(以兆字节为单位)。
- WS(M):进程的工作集的大小(以兆字节为单位)。 工作集由进程最近引用的内存页组成。
- CPU(s):进程在所有处理器上使用的处理器时间(以秒为单位)。
- ID:进程的进程 ID(PID)。
- SI:进程的会话 ID。
- ProcessName:进程的名称。
可以将内置的备用视图用于可用于Format-Table
的 Process 对象,例如 StartTime 和 Priority。 还可以设计自己的视图。