共用方式為


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

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

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

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

範例

範例 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,該 Cmdlet 會使用 Priority 檢視來格式化進程。

優先順序檢視和其他檢視會以 PowerShell 主目錄 () 中的 PS1XML 格式檔案定義$pshome

範例 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

此命令會取得具有主視窗標題的所有進程,並在具有進程標識碼和進程名稱的數據表中顯示它們。

mainWindowTitle 屬性只是 Process 物件Get-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,才能在您不擁有的進程上使用此參數。

您無法在同一個命令中使用 Cmdlet 的 Get-Process FileVersionInfoComputerName 參數。

若要取得遠端電腦上進程的檔案版本資訊,請使用 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 等進程,而且您可以設計自己的檢視。