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 *

此管道显示计算机上有关 winwordexplorer 进程的详细信息。 它使用 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 和名称的表中显示它们。

MainWindowTitleDiagnostics.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

结合使用 ModuleFileVersionInfo 参数时,此 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 位进程时,返回的进程对象等PathMainModule属性是$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 对象,例如 StartTimePriority。 还可以设计自己的视图。

有关所有可用 Process 对象成员的说明,请参阅 “进程属性 ”和 “进程方法”。