Get-Process
获取在本地计算机或远程计算机上运行的进程。
语法
Get-Process [[-Name] <string[]>] [-ComputerName <string[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]
Get-Process -Id <Int32[]> [-ComputerName <string[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]
Get-Process -InputObject <Process[]> [-ComputerName <string[]>] [-FileVersionInfo] [-Module] [<CommonParameters>]
说明
Get-Process cmdlet 获取本地或远程计算机上的进程。
如果没有参数,则 Get-Process 获取本地计算机上的所有进程。还可以通过进程名称或进程 ID (PID) 来指定特定进程,或将进程对象通过管道传送给 Get-Process。
默认情况下,Get-Process 将返回一个进程对象,该对象包含有关进程的详细信息并且支持允许您启动和停止进程的方法。还可以使用 Get-Process 的参数来获取进程中运行的程序的文件版本信息以及获取进程加载的模块。
参数
-ComputerName <string[]>
获取指定计算机上运行的进程。默认值为本地计算机。
键入一台或多台计算机的 NetBIOS 名称、IP 地址或完全限定的域名。要指定本地计算机,请键入计算机名称、句点 (.) 或“localhost”。
此参数不依赖于 Windows PowerShell 远程处理。即使您的计算机未配置为运行远程命令,您也可以使用 Get-Process 的 ComputerName 参数。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
false |
-FileVersionInfo
获取进程中运行的程序的文件版本信息。
在 Windows Vista 以及更高版本的 Windows 上,必须使用“以管理员身份运行”选项打开 Windows PowerShell,才能对您不具有所有权的进程使用此参数。
使用此参数等效于获取每个进程对象的 MainModule.FileVersionInfo 属性。如果使用此参数,则 Get-Process 返回 FileVersionInfo 对象 (System.Diagnostics.FileVersionInfo),而非进程对象。因此,不能通过管道将命令输出传递到需要进程对象的 cmdlet(例如 Stop-Process)。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Id <Int32[]>
通过进程 ID (PID) 指定一个或多个进程。若要指定多个 ID,请使用逗号分隔 ID。要查找进程的 PID,请键入“get-process”。
是否为必需? |
true |
位置? |
named |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
false |
-InputObject <Process[]>
指定一个或多个进程对象。输入一个包含对象的变量,或键入可获取对象的命令或表达式。
是否为必需? |
true |
位置? |
named |
默认值 |
|
是否接受管道输入? |
true (ByValue) |
是否接受通配符? |
false |
-Module
获取已由进程加载的模块。
在 Windows Vista 以及更高版本的 Windows 上,必须使用“以管理员身份运行”选项打开 Windows PowerShell,才能对您不具有所有权的进程使用此参数。
此参数等效于获取每个进程对象的 Modules 属性。如果使用此参数,则 Get-Process 返回 ProcessModule 对象 (System.Diagnostics.ProcessModule),而非进程对象。因此,不能通过管道将命令输出传递到需要进程对象的 cmdlet(例如 Stop-Process)。
在同一个命令中同时使用 Module 和 FileVersionInfo 参数时,Get-Process 将返回包含所有模块的文件版本相关信息的 FileVersionInfo 对象。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-Name <string[]>
通过进程名称指定一个或多个进程。可以键入多个进程名称(以逗号分隔)或使用通配符。参数名(“Name”)为可选项。
是否为必需? |
false |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
true |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.Diagnostics.Process 可以将进程对象通过管道传递给 Get-Process。 |
输出 |
System.Diagnostics.Process, System.Diagnotics.FileVersionInfo, System.Diagnostics.ProcessModule 默认情况下,Get-Process 将返回 System.Diagnostics.Process 对象。如果使用 FileVersionInfo 参数,则将返回 System.Diagnotics.FileVersionInfo 对象。如果使用 Module 参数(不带 FileVersionInfo 参数),则将返回 System.Diagnostics.ProcessModule 对象。 |
说明
不能在同一个命令中使用 Name、ID 和 InputObject 参数。
还可以通过 Get-Process 的内置别名“ps”和“gps”来对其进行引用。有关详细信息,请参阅 about_Aliases。
也可使用 Windows PowerShell 中的 WMI Win32_Process 对象的属性和方法。有关信息,请参阅 Get-WmiObject 和 Windows Management Instrumentation (WMI) SDK。
进程的默认显示为包括以下列的表:
-- Handles:进程打开的句柄数。
-- NPM(K):进程正在使用的非分页内存量,以千字节为单位。
-- PM(K):进程正在使用的可分页的内存量,以千字节为单位。
-- WS(K):进程工作集的大小,以千字节为单位。工作集包括进程最近引用的内存的页面。
-- VM(M):进程正在使用的虚拟内存量,以兆字节为单位。虚拟内存包括磁盘上分页文件中的存储。
-- CPU(s):进程已用于所有处理器的处理器时间量,以秒为单位。
-- ID:进程的进程 ID (PID)。
-- ProcessName:进程的名称。
有关与进程相关的概念的解释,请参阅帮助和支持中心中的词汇表以及任务管理器帮助。
还可以使用 Format-Table 提供的内置式进程可选视图,例如“StartTime”和“Priority”,也可设计自己的视图。有关详细信息,请参阅 Format-Table。
示例 1
C:\PS>Get-Process
说明
-----------
此命令获取本地计算机上运行的所有正在运行的进程列表。有关每列的定义,请参阅 Get-Help 的帮助主题的“附加注释”一节。
示例 2
C:\PS>Get-Process winword, explorer | format-list *
说明
-----------
此命令获取计算机上的有关 Winword 和 Explorer 进程的所有可用的数据。它使用 Name 参数来指定进程,但省略可选的参数名。管道运算符 (|) 将数据传递给 Format-List cmdlet,后者将显示 Winword 和 Explorer 进程对象的所有可用属性 (*)。
也可通过其进程 ID 来标识这些进程。例如,“get-process -id 664, 2060”。
示例 3
C:\PS>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
C:\PS>$a = get-process
C:\PS> get-process -inputobject $a | format-table -view priority
说明
-----------
这些命令根据计算机上进程的优先级类将其分组列出。
第一个命令获取计算机上的所有进程,然后将其存储在 $a 变量中。
第二个命令使用 InputObject 参数将存储在 $a 变量中的进程对象传递给 Get-Process cmdlet。管道运算符将对象传递给 Format-Table cmdlet,该 cmdlet 使用 Priority 视图设置进程的格式。
在 Windows PowerShell 主目录 ($pshome) 中的 PS1XML 格式文件中对 Priority 视图及其他视图进行了定义。
示例 5
C:\PS>get-process powershell -computername S1, localhost | ft @{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 -ne $()) { $_.CPU.ToString("N")}}}, Id, MachineName, ProcessName -auto
NPM(K) PM(K) WS(K) VM(M) CPU(s) Id MachineName ProcessName
------ ----- ----- ----- ------ -- ----------- -----------
6 23500 31340 142 1980 S1 powershell
6 23500 31348 142 4016 S1 powershell
27 54572 54520 576 4428 localhost powershell
说明
-----------
此示例提供将 MachineName 属性添加到标准 Get-Process 输出显示的 Format-Table(别名为 ft)命令。
示例 6
C:\PS>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.exe 文件的版本信息,该文件是 PowerShell 进程的主模块。
要在 Windows Vista 以及更高版本的 Windows 上对您不具有所有权的进程运行此命令,必须使用“以管理员身份运行”选项打开 Windows PowerShell。
示例 7
C:\PS>get-process sql* -module
说明
-----------
此命令使用 Module 参数来获取已由进程加载的模块。此命令获取名称以“sql”开头的进程的模块。
要在 Windows Vista(以及更高版本的 Windows)上对您不具有所有权的进程运行此命令,必须使用“以管理员身份运行”选项启动 Windows PowerShell。
示例 8
C:\PS>$p = get-wmiobject win32_process -filter "name='powershell.exe'"
C:\PS> $p.getowner()
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS
__RELPATH :
__PROPERTY_COUNT : 3
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
Domain : DOMAIN01
ReturnValue : 0
User : user01
说明
-----------
此命令演示如何查找进程的所有者。因为 Get-Process 返回的 System.Diagnostics.Process 对象没有返回进程所有者的属性和方法,所以该命令将使用
Get-WmiObject cmdlet 来获取表示该进程的 Win32_Process 对象。
第一个命令使用 Get-WmiObject 来获取 PowerShell 进程。此命令将其保存在 $p 变量中。
第二个命令使用 GetOwner 方法来获取 $p 中进程的所有者。此命令显示所有者为 Domain01\user01。
示例 9
C:\PS>get-process powershell
C:\PS> get-process -id $pid
C:\PS> 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
C:\PS> 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 自动变量来标识承载当前 Windows PowerShell 会话的进程。可以使用此方法将宿主进程与可能要停止或关闭的其他 PowerShell 进程区分开来。
第一个命令获取当前会话中的所有 PowerShell 进程。
第二个命令获取承载当前会话的 PowerShell 进程。
另请参阅
概念
Get-Process
Start-Process
Stop-Process
Wait-Process
Debug-Process