Get-Process

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

语法

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

说明

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

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

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

示例

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

Get-Process

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

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

Get-Process winword, explorer | Format-List *

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

还可以按进程 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。 默认情况下,所有数量属性的值都以字节为单位,即使默认显示以 KB 和兆字节为单位列出它们。

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

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

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

第二个命令通过管道将存储在 $A 变量中的 Process 对象传递给 Get-Process cmdlet,然后传递给 Format-Table cmdlet,该 cmdlet 使用 Priority 视图格式化进程。

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

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

Get-Process powershell | 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 powershell  12/5/2022 3:21:51 PM
   114  61776 104588 2366127 11.45  18336 powershell  12/5/2022 7:30:53 AM
   156  77924  82060 2366185 10.47  18812 powershell  12/5/2022 7:30:52 AM
    85  48216 115192 2366074 1.14   24428 powershell  12/8/2022 9:14:15 AM

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

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

Get-Process powershell -FileVersionInfo

ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.6713.1       6.1.6713.1 (f... C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

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

若要在 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     powershell

$p = Get-WmiObject Win32_Process -Filter "name='powershell.exe'"
$p.GetOwner()

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 3
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Domain           : DOMAIN01
ReturnValue      : 0
User             : user01

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

第二个和第三个命令是查找进程的所有者的另一种方法。

第二个命令使用 Get-WmiObject 来获取 PowerShell 进程。 它将保存在 $p 变量中。

第三个命令使用 GetOwner 方法获取 $p中的进程的所有者。 输出显示所有者 Domain01\user01

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

Get-Process powershell

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
308      26        52308      61780   567     3.18   5632 powershell
377      26        62676      63384   575     3.88   5888 powershell

Get-Process -Id $PID

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
396      26        56488      57236   575     3.90   5888 powershell

这些命令演示如何使用 $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

参数

-ComputerName

指定此 cmdlet 获取活动进程的计算机。 默认值为本地计算机。

键入一台或多台计算机的 NetBIOS 名称、IP 地址或完全限定的域名(FQDN)。 若要指定本地计算机,请键入计算机名称、点(.)或 localhost

此参数不依赖于 Windows PowerShell 远程处理。 即使计算机未配置为运行远程命令,也可以使用此 cmdlet 的 ComputerName 参数。

类型:String[]
别名:Cn
Position:Named
默认值:Local computer
必需:False
接受管道输入:True
接受通配符:False

-FileVersionInfo

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

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

不能在同一命令中使用 FileVersionInfoComputerName 参数 Get-Process cmdlet。

若要获取远程计算机上的进程的文件版本信息,请使用 Invoke-Command cmdlet。

使用此参数等效于获取每个进程对象的 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

指示返回 Process 对象的 UserName 值以及命令的结果。

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

-InputObject

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

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

-Module

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

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

若要获取远程计算机上进程加载的模块,请使用 Invoke-Command cmdlet。

此参数等效于获取每个进程对象的 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 对象。

备注

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

  • gps
  • 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):进程正在使用的虚拟内存量(以兆字节为单位)。 虚拟内存包括磁盘上的分页文件中的存储。
  • CPU(s):进程在所有处理器上使用的处理器时间(以秒为单位)。
  • ID:进程的进程 ID(PID)。
  • ProcessName:进程的名称。 有关与流程相关的概念的说明,请参阅帮助和支持中心的术语表和任务管理器的帮助。

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