Get-Process

获取在本地计算机上运行的进程。

语法

Get-Process
   [[-Name] <String[]>]
   [-Module]
   [-FileVersionInfo]
   [<CommonParameters>]
Get-Process
   [[-Name] <String[]>]
   -IncludeUserName
   [<CommonParameters>]
Get-Process
   -Id <Int32[]>
   [-Module]
   [-FileVersionInfo]
   [<CommonParameters>]
Get-Process
   -Id <Int32[]>
   -IncludeUserName
   [<CommonParameters>]
Get-Process
   -InputObject <Process[]>
   [-Module]
   [-FileVersionInfo]
   [<CommonParameters>]
Get-Process
   -InputObject <Process[]>
   -IncludeUserName
   [<CommonParameters>]

说明

Get-Process cmdlet 获取本地计算机上的进程。

还可以通过进程名称或进程 ID (PID) 来指定特定进程,或将进程对象通过管道传送给此 cmdlet。 还可以通过进程名称或进程 ID (PID) 来指定特定进程,或将进程对象通过管道传送给此 cmdlet。

默认情况下,此 cmdlet 将返回一个进程对象,该对象包含有关进程的详细信息并且支持允许你启动和停止进程的方法。 还可以使用 Get-Process cmdlet 的参数来获取进程中运行的程序的文件版本信息以及获取进程加载的模块。

示例

示例 1:获取本地计算机上所有活动进程的列表

Get-Process

此命令获取本地计算机上运行的所有活动进程的列表。 有关每个列的定义,请参阅注释部分。

示例 2:获取有关一个或多个进程的所有可用数据

Get-Process winword, explorer | Format-List *

此命令获取计算机上的有关 Winword 和 Explorer 进程的所有可用的数据。 它使用 Name 参数来指定进程,但省略可选的参数名。 管道运算符 (|) 将数据传递给 Format-List cmdlet,后者将显示 Winword 和 Explorer 进程对象的所有可用属性 (*)。

也可通过其进程 ID 来标识这些进程。 例如:Get-Process -Id 664, 2060

示例 3:获取工作集大于指定大小的所有进程

Get-Process | Where-Object {$_.WorkingSet -gt 20000000}

此命令获取所有工作集大于 20 MB 的进程。 它使用 Get-Process cmdlet 来获取所有正在运行的进程。 管道运算符 (|) 将进程对象传递给 Where-Object cmdlet,后者只选择 WorkingSet 属性的值大于 20,000,000 字节的对象。

WorkingSet 是进程对象的许多属性中的一个。 若要查看所有属性,请键入 Get-Process | Get-Member。 默认情况下,所有数量属性的值以字节为单位,尽管默认显示以千字节和兆字节为单位列出这些值。

示例 4:根据优先级分组列出计算机上的进程

$A = Get-Process
$A | Get-Process | Format-Table -View priority

这些命令根据计算机上进程的优先级类将其分组列出。 第一个命令获取计算机上的所有进程,然后将其存储在 $A 变量中。

第二个命令将存储在 $A 变量中的 Process 对象传送到 Get-Process cmdlet,然后传送到 Format-Table cmdlet,后者使用优先级视图格式化进程。

Priority 视图和其他视图在 PowerShell 主目录 ($pshome) 的 PS1XML 格式文件中定义。

示例 5:向标准 Get-Process 输出显示添加属性

Get-Process pwsh | Format-Table `
    @{Label = "NPM(K)"; Expression = {[int]($_.NPM / 1024)}},
    @{Label = "PM(K)"; Expression = {[int]($_.PM / 1024)}},
    @{Label = "WS(K)"; Expression = {[int]($_.WS / 1024)}},
    @{Label = "VM(M)"; Expression = {[int]($_.VM / 1MB)}},
    @{Label = "CPU(s)"; Expression = {if ($_.CPU) {$_.CPU.ToString("N")}}},
    Id, ProcessName, StartTime -AutoSize

NPM(K)  PM(K)  WS(K)   VM(M) CPU(s)    Id ProcessName StartTime
------  -----  -----   ----- ------    -- ----------- ---------
   143 239540 259384 2366162 22.73  12720 pwsh        12/5/2022 3:21:51 PM
   114  61776 104588 2366127 11.45  18336 pwsh        12/5/2022 7:30:53 AM
   156  77924  82060 2366185 10.47  18812 pwsh        12/5/2022 7:30:52 AM
    85  48216 115192 2366074 1.14   24428 pwsh        12/8/2022 9:14:15 AM

此示例从本地计算机检索进程。 检索到的进程通过管道传送到 Format-Table 命令,该命令将 StartTime 属性添加到标准 Get-Process 输出显示。

示例 6:获取进程的版本信息

Get-Process pwsh -FileVersionInfo

ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.2            6.1.2            C:\Program Files\PowerShell\6\pwsh.exe

此命令使用 FileVersionInfo 参数来获取 pwsh.exe 文件的版本信息,该文件是 PowerShell 进程的主模块。

若要在 Windows Vista 以及更高版本的 Windows 上对你不具有所有权的进程运行此命令,则必须使用“以管理员身份运行”选项打开 PowerShell。

示例 7:获取使用指定进程加载的模块

Get-Process SQL* -Module

此命令使用 Module 参数来获取已由进程加载的模块。 此命令获取名称以 SQL 开头的进程的模块。

若要在 Windows Vista(以及更高版本的 Windows)上对你不具有所有权的进程运行此命令,则必须使用“以管理员身份运行”选项启动 PowerShell。

示例 8:查找进程的所有者

Get-Process pwsh -IncludeUserName

Handles      WS(K)   CPU(s)     Id UserName            ProcessName
-------      -----   ------     -- --------            -----------
    782     132080     2.08   2188 DOMAIN01\user01     pwsh

此命令演示如何查找进程的所有者。 在 Windows 上,IncludeUserName 参数需要提升的用户权限(以管理员身份运行)。 输出显示所有者为 Domain01\user01

示例 9:使用自动变量标识托管当前会话的进程

Get-Process 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 会话的进程。 可以使用此方法将宿主进程与可能要停止或关闭的其他 PowerShell 进程区分开来。

第一个命令获取当前会话中的所有 PowerShell 进程。

第二个命令获取可托管当前会话的 PowerShell 进程。

示例 10:获取具有主窗口标题的所有进程并将它们显示在表中

Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize

此命令获取具有主窗口标题的所有进程,并在表中显示这些进程及其进程 ID 和进程名称。

mainWindowTitle 属性只是 Get-Process 返回的 Process 对象的众多有用属性之一。 若要查看所有属性,请通过管道将 Get-Process 命令的结果传递给 Get-Member cmdlet Get-Process | Get-Member

参数

-FileVersionInfo

指示此 cmdlet 获取进程中运行的程序的文件版本信息。

在 Windows Vista 以及更高版本的 Windows 上,必须使用“以管理员身份运行”选项打开 PowerShell,才能对你不具有所有权的进程使用此参数。

使用此参数等效于获取每个进程对象的 MainModule.FileVersionInfo 属性。 使用此参数时,Get-Process 将返回 FileVersionInfo 对象 System.Diagnostics.FileVersionInfo,而不是进程对象。 因此,不能通过管道将命令输出传递到需要进程对象的 cmdlet(例如 Stop-Process)。

类型:SwitchParameter
别名:FV, FVI
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Id

通过进程 ID (PID) 指定一个或多个进程。 若要指定多个 ID,请使用逗号分隔 ID。 若要查找进程的 PID,请键入 Get-Process

类型:Int32[]
别名:PID
Position:Named
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-IncludeUserName

指示随该命令的结果一同返回的进程对象的 UserName 值。

类型:SwitchParameter
Position:Named
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-InputObject

指定一个或多个进程对象。 输入一个包含对象的变量,或键入可获取对象的命令或表达式。

类型:Process[]
Position:Named
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Module

指示此 cmdlet 获取进程已加载的模块。

在 Windows Vista 以及更高版本的 Windows 上,必须使用“以管理员身份运行”选项打开 PowerShell,才能对你不具有所有权的进程使用此参数。

此参数等效于获取每个进程对象的 Modules 属性。 使用此参数时,此 cmdlet 将返回 ProcessModule 对象 System.Diagnostics.ProcessModule,而不是进程对象。 因此,不能通过管道将命令输出传递到需要进程对象的 cmdlet(例如 Stop-Process)。

在同一命令中同时使用 ModuleFileVersionInfo 参数时,此 cmdlet 将返回一个 FileVersionInfo 对象,其中包含有关所有模块的文件版本的信息。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Name

通过进程名称指定一个或多个进程。 可以键入多个进程名称(以逗号分隔),并可以使用通配符。 参数名称 (Name) 为可选项。

类型:String[]
别名:ProcessName
Position:0
默认值:None
必需:False
接受管道输入:True
接受通配符:True

输入

Process

可以将进程对象通过管道传递给此 cmdlet。

输出

Process

默认情况下,此 cmdlet 将返回 System.Diagnostics.Process 对象。

FileVersionInfo

如果使用 FileVersionInfo 参数,此 cmdlet 将返回 FileVersionInfo 对象。

ProcessModule

如果使用 Module 参数,而不使用 FileVersionInfo 参数,则此 cmdlet 将返回 ProcessModule 对象。

备注

PowerShell 包含 Get-Process 的以下别名:

  • 所有平台:
    • gps
  • Windows:
    • ps

在运行 64 位版本 Windows 的计算机上,64 位版本的 PowerShell 仅获取 64 位进程模块,而 32 位版本的 PowerShell 也仅获取 32 位进程模块。

若要从远程计算机获取进程信息,请使用 Invoke-Command cmdlet。 有关详细信息,请参阅 Invoke-Command

可以使用 PowerShell 中的 Windows Management Instrumentation (WMI) Win32_Process 对象的属性和方法。 有关信息,请参阅 Win32_Process

进程的默认显示为包括以下列的表。 有关进程对象的所有属性的说明,请参阅进程属性

  • Handles:进程打开的句柄数。
  • NPM(K):进程正在使用的非分页内存量,以千字节为单位。
  • PM(K):进程正在使用的可分页的内存量,以千字节为单位。
  • WS(K):进程工作集的大小,以千字节为单位。 工作集包括进程最近引用的内存的页面。
  • VM(M):进程正在使用的虚拟内存量,以兆字节为单位。 虚拟内存包括磁盘上分页文件中的存储。
  • CPU(s):进程已用于所有处理器的处理器时间量,以秒为单位。
  • ID:进程的进程 ID (PID)。
  • ProcessName:进程的名称。 有关与进程相关的概念的解释,请参阅帮助和支持中心中的词汇表以及任务管理器帮助。

还可以使用 Format-Table 提供的内置式进程可选视图,例如“StartTime”和“Priority”,也可设计自己的视图。