Get-Process

取得在本機電腦或遠端電腦上執行的進程。

語法

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

Description

Get-Process Cmdlet 會取得本機或遠端電腦上的進程。

如果沒有參數,此 Cmdlet 會取得本機電腦上的所有進程。 您也可以依行程名稱或進程標識碼 (PID) 指定特定進程,或透過管線將進程對象傳遞至此 Cmdlet。

根據預設,此 Cmdlet 會傳回進程物件,其中包含進程的詳細資訊,並支援可讓您啟動和停止進程的方法。 您也可以使用 Get-Process Cmdlet 的參數,取得程式中執行之程式的檔案版本資訊,以及取得載入進程的模組。

範例

範例 1:取得本機計算機上所有使用中進程的清單

PowerShell
Get-Process

此命令會取得本機計算機上執行的所有使用中進程清單。 如需每個數據行的定義,請參閱 Notes 一節。

範例 2:取得一或多個進程的所有可用數據

PowerShell
Get-Process winword, explorer | Format-List *

此命令會取得電腦上 Winword 和 Explorer 處理程式的所有可用數據。 它會使用 Name 參數來指定進程,但省略選擇性參數名稱。 管線運算符 (|) 會將數據傳遞至 Format-List Cmdlet,此 Cmdlet 會顯示 Winword 和 Explorer 進程物件的所有可用屬性(*)。

您也可以依其進程識別碼來識別進程。 例如,Get-Process -Id 664, 2060

範例 3:取得工作集大於指定大小的所有進程

PowerShell
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:根據優先順序在群組中列出計算機上的進程

PowerShell
$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 輸出顯示

PowerShell
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:取得進程的版本資訊

PowerShell
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:取得使用指定進程載入的模組

PowerShell
Get-Process SQL* -Module

此命令會使用 Module 參數來取得進程已載入的模組。 此命令會取得具有開頭為 SQL之進程的模組。

若要在 Windows Vista 和更新版本的 Windows 上使用您不擁有的程式執行此命令,您必須使用 [以系統管理員身分執行] 選項啟動 PowerShell。

範例 8:尋找進程的擁有者

PowerShell
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:使用自動變數來識別裝載目前會話的進程

PowerShell
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:取得具有主視窗標題的所有進程,並將其顯示在數據表中

PowerShell
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,才能在您不擁有的進程上使用此參數。

您不能在同一個命令中使用 FileVersionInfoComputerNameGet-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

當您在同一個命令中使用 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

進程的預設顯示是包含下列數據行的數據表。 如需行程物件之所有屬性的描述,請參閱 Process Properties

  • 句柄:進程已開啟的句柄數目。
  • NPM(K):進程所使用的非分頁記憶體數量,以 KB 為單位。
  • PM(K):行程使用的可分頁記憶體數量,以 KB 為單位。
  • WS(K):進程工作集的大小,以 KB 為單位。 工作集是由進程最近參考的記憶體分頁所組成。
  • VM(M):行程所使用的虛擬記憶體數量,以 MB 為單位。 虛擬記憶體包含磁碟上分頁檔案中的記憶體。
  • CPU(s):進程在所有處理器上使用的處理器時間,以秒為單位。
  • 識別碼:進程的進程標識碼(PID)。
  • ProcessName:進程的名稱。 如需程式相關概念的說明,請參閱說明與支援中心中的詞彙和任務管理員的說明。

您也可以使用與 Format-Table搭配使用之程式的內建替代檢視,例如 StartTimePriority,而且您可以設計自己的檢視。