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>]

说明

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

如果没有参数,此 cmdlet 将获取本地计算机上的所有进程。 还可以按进程名称或进程 ID (PID) 指定特定进程,或者通过管道将进程对象传递给此 cmdlet。

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

示例

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

Get-Process

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

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

Get-Process winword, explorer | Format-List *

此命令获取计算机上的有关 Winword 和 Explorer 进程的所有可用的数据。 它使用 Name 参数指定进程,但省略可选的参数名称。 管道运算符 (|) 将数据 Format-List 传递给 cmdlet,该 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,该 cmdlet 仅为 WorkingSet 属性选择值大于 20,000,000 字节的对象。

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

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

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

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

第二个命令通过管道将存储在 变量中的 $AProcess 对象传递给 Get-Process cmdlet,然后通过管道传递给 Format-Table cmdlet,该 cmdlet 使用“优先级”视图设置进程格式。

优先级视图和其他视图在 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 进程的main模块。

若要使用你在 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:获取具有main窗口标题的所有进程并将其显示在表中

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

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

mainWindowTitle 属性只是返回的 Process 对象的许多有用属性之一Get-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

Type:SwitchParameter
Aliases:FV, FVI
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

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

Type:Int32[]
Aliases:PID
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-IncludeUserName

指示 返回包含 命令结果的 Process 对象的 UserName 值。

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

Type:Process[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Module

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

在 Windows Vista 和更高版本的 Windows 上,必须使用 “以管理员身份运行” 选项打开 PowerShell,才能在自己不拥有的进程上使用此参数。

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

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

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

Type:String[]
Aliases:ProcessName
Position:0
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters: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

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

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

还可以使用 可用于 Format-Table的进程的内置备用视图,例如 StartTimePriority,并且可以设计自己的视图。