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 -ComputerName S1, localhost | 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, MachineName, ProcessName -AutoSize

NPM(K) PM(K) WS(K) VM(M) CPU(s)   Id MachineName ProcessName
------ ----- ----- ----- ------   -- ----------- -----------
     6 23500 31340   142 1.70   1980 S1          powershell
     6 23500 31348   142 2.75   4016 S1          powershell
    27 54572 54520   576 5.52   4428 localhost   powershell

此示例从本地计算机和远程计算机(S1)检索进程。 检索的进程通过管道传递给 Format-Table 命令,该命令将 MachineName 属性添加到标准 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:查找进程的所有者

PS C:\> Get-Process powershell -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,才能在你不拥有的进程上使用此参数。

不能在同一命令中使用 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,才能在你不拥有的进程上使用此参数。

若要获取远程计算机上进程加载的模块,请使用 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。

输出

System.Diagnostics.Process, System.Diagnostics.FileVersionInfo, System.Diagnostics.ProcessModule

默认情况下,此 cmdlet 返回 System.Diagnostics.Process 对象。 如果使用 FileVersionInfo 参数,它将返回 System.Diagnostics.FileVersionInfo 对象。 如果使用 Module 参数,而不使用 FileVersionInfo 参数,它将返回 System.Diagnostics.ProcessModule 对象。

备注

  • 还可以通过其内置别名、ps 和 gps 来引用此 cmdlet。 有关详细信息,请参阅 about_Aliases
  • 在运行 64 位版本的 Windows 的计算机上,64 位版本的 PowerShell 仅获取 64 位进程模块,而 32 位版本的 PowerShell 仅获取 32 位进程模块。
  • 可以在 PowerShell 中使用 Windows Management Instrumentation (WMI) Win32_Process对象的属性和方法。 有关信息,请参阅 Get-WmiObject 和 WMI SDK。
  • 进程的默认显示是包含以下列的表。 有关进程对象的所有属性的说明,请参阅 MSDN 库中 进程属性
    • 句柄:进程已打开的句柄数。
    • NPM(K):进程正在使用的非分页内存量(以 KB 为单位)。
    • PM(K):进程使用的可分页内存量(以 KB 为单位)。
    • WS(K):进程的工作集的大小(以 KB 为单位)。 工作集由进程最近引用的内存页组成。
    • VM(M):进程正在使用的虚拟内存量(以兆字节为单位)。 虚拟内存包括磁盘上的分页文件中的存储。
    • CPU(s):进程在所有处理器上使用的处理器时间(以秒为单位)。
    • ID:进程的进程 ID(PID)。
    • ProcessName:进程的名称。 有关与流程相关的概念的说明,请参阅帮助和支持中心的术语表和任务管理器的帮助。
  • 还可以使用 Format-Table可用的进程的内置备用视图,例如 StartTimePriority,并且可以设计自己的视图。