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>]
Description
Get-Process
Cmdlet 會取得本機或遠端電腦上的進程。
如果沒有參數,此 Cmdlet 會取得本機電腦上的所有進程。 您也可以依行程名稱或進程標識碼 (PID) 指定特定進程,或透過管線將進程對象傳遞至此 Cmdlet。
根據預設,此 Cmdlet 會傳回進程物件,其中包含進程的詳細資訊,並支援可讓您啟動和停止進程的方法。
您也可以使用 Get-Process
Cmdlet 的參數,取得程式中執行之程式的檔案版本資訊,以及取得載入進程的模組。
範例
範例 1:取得本機計算機上所有使用中進程的清單
Get-Process
此命令會取得本機計算機上執行的所有使用中進程清單。 如需每個數據行的定義,請參閱 Notes 一節。
範例 2:取得一或多個進程的所有可用數據
Get-Process winword, explorer | Format-List *
此命令會取得電腦上 Winword 和 Explorer 處理程式的所有可用數據。
它會使用 Name 參數來指定進程,但省略選擇性參數名稱。
管線運算子 |
將數據傳遞至 Format-List
Cmdlet,此 Cmdlet 會顯示 Winword 和 Explorer 進程物件 *
的所有可用屬性。
您也可以依其進程識別碼來識別進程。
例如,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 和 MB 列出。
範例 4:根據優先順序在群組中列出計算機上的進程
$A = Get-Process
$A | Get-Process | Format-Table -View priority
這些命令會根據其優先順序類別,列出群組中的計算機上進程。
第一個命令會取得計算機上的所有進程,然後將它們儲存在 $A
變數中。
第二個命令會將儲存在 $A
變數中的 Process 物件傳送至 Get-Process
Cmdlet,然後傳送至 Format-Table
Cmdlet,其會使用 Priority 檢視來格式化進程。
優先順序 檢視和其他檢視,會以 PowerShell 主目錄中的 PS1XML 格式檔案 ($pshome
) 定義。
範例 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
此命令會取得具有主視窗標題的所有進程,並在具有進程標識碼和進程名稱的數據表中顯示它們。
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,才能在您不擁有的進程上使用此參數。
您不能在同一個命令中使用 FileVersionInfo 和 ComputerNameGet-Process
參數。
若要取得遠端電腦上進程的檔案版本資訊,請使用 Invoke-Command
Cmdlet。
使用此參數相當於取得每個進程物件的 MainModule.FileVersionInfo 屬性。
當您使用此參數時,Get-Process
傳回 FileVersionInfo 物件 System.Diagnostics.FileVersionInfo,而不是進程物件。
因此,您無法使用管線將命令的輸出傳送至預期進程物件的 Cmdlet,例如 Stop-Process
。
類型: | SwitchParameter |
別名: | FV, FVI |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Id
依進程標識子指定一或多個進程(PID)。
若要指定多個識別碼,請使用逗號來分隔標識符。
若要尋找行程的 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
。
當您在同一個命令中使用 Module 和 FileVersionInfo 參數時,這個 Cmdlet 會傳回 FileVersionInfo 物件,其中包含所有模組的檔案版本相關信息。
類型: | SwitchParameter |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Name
依行程名稱指定一或多個進程。 您可以輸入多個進程名稱(以逗號分隔),並使用通配符。 參數名稱 (“Name”) 是選擇性的。
類型: | String[] |
別名: | ProcessName |
Position: | 0 |
預設值: | None |
必要: | False |
接受管線輸入: | True |
接受萬用字元: | True |
輸入
您可以使用管線將進程物件傳送至此 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):行程所使用的虛擬記憶體數量,以 MB 為單位。 虛擬記憶體包含磁碟上分頁檔案中的記憶體。
- CPU(s):進程在所有處理器上使用的處理器時間,以秒為單位。
- 標識碼:進程的進程標識碼(PID)。
- ProcessName:進程的名稱。 如需程式相關概念的說明,請參閱說明與支援中心中的詞彙和任務管理員的說明。
- 您也可以使用與
Format-Table
搭配使用之程式的內建替代檢視,例如 StartTime 和 Priority,而且您可以設計自己的檢視。