Get-Process

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

Syntax

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,以顯示 Winword 和 Explorer 進程物件) (的所有可用屬性 *

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

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

Get-Process | Where-Object {$_.WorkingSet -gt 20000000}

此命令取得工作集大於 20 MB 的所有處理程序。 它會使用 Get-Process Cmdlet 來取得所有執行中的進程。 管線運算子 () | 將進程物件傳遞至 Where-Object Cmdlet,其只會選取值大於 20,000,000 個位元組的 Cmdlet

WorkingSet 是進程物件的許多屬性之一。 若要查看所有屬性,請輸入 Get-Process | Get-Member 。 根據預設,所有數量屬性都是以位元組為單位,即使預設顯示是以 KB 和 MB 來列示它們。

範例 4:根據優先順序列出群組中電腦上的進程

$A = Get-Process
$A | Get-Process | Format-Table -View priority

這些命令會根據其優先順序類別,列出電腦上群組中的進程。 第一個命令會取得電腦上的所有進程,然後將其儲存在變數中 $A

第二個命令會使用管線將儲存在 變數中的 $AProcess物件傳送至 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 參數。

Type:String[]
Aliases:Cn
Position:Named
Default value:Local computer
Accept pipeline input:True
Accept wildcard characters:False

-FileVersionInfo

指出這個 Cmdlet 會取得進程中執行之程式的檔案版本資訊。

在 Windows Vista 和更新版本的 Windows 上,您必須使用 [ 以系統管理員身分執行 ] 選項開啟 PowerShell,才能在您不擁有的進程上使用此參數。

您無法在相同的命令中使用 Cmdlet 的 Get-ProcessFileVersionInfoComputerName參數。

若要取得遠端電腦上的進程檔案版本資訊,請使用 Invoke-Command Cmdlet。

使用此參數相當於取得每個進程物件的 MainModule.FileVersionInfo 屬性。 當您使用此參數時, Get-Process 會傳回 FileVersionInfo 物件 System.Diagnostics.FileVersionInfo,而不是進程物件。 因此,您無法將命令的輸出傳送至預期進程物件的 Cmdlet,例如 Stop-Process

Type:SwitchParameter
Aliases:FV, FVI
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

依處理程序識別碼 (PID) 指定一個或多個處理程序。 若要指定多個識別碼,請使用逗號來分隔識別碼。 若要尋找處理程序的 PID,請輸入 Get-Process

Type:Int32[]
Aliases:PID
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-IncludeUserName

指出 Process 物件的 UserName 值會以命令的結果傳回。

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定一個或多個處理程序物件。 輸入包含物件的變數,或輸入可取得物件的命令或運算式。

Type:Process[]
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-Module

指出這個 Cmdlet 會取得進程已載入的模組。

在 Windows Vista 和更新版本的 Windows 上,您必須使用 [ 以系統管理員身分執行 ] 選項開啟 PowerShell,才能在您不擁有的進程上使用此參數。

若要取得遠端電腦上進程已載入的模組,請使用 Invoke-Command Cmdlet。

此參數相當於取得每個進程物件的 Modules 屬性。 當您使用此參數時,這個 Cmdlet 會傳回 ProcessModule 物件 System.Diagnostics.ProcessModule,而不是進程物件。 因此,您無法將命令的輸出傳送至預期進程物件的 Cmdlet,例如 Stop-Process

當您在相同的命令中使用 ModuleFileVersionInfo 參數時,此 Cmdlet 會傳回 FileVersionInfo 物件,其中包含所有模組檔案版本的相關資訊。

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

依處理程序名稱指定一個或多個處理程序。 您可以輸入多個處理程序名稱 (以逗號分隔) 及使用萬用字元。 參數名稱 (Name) 是選擇性的。

Type:String[]
Aliases:ProcessName
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters: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 位進程模組。

  • 您可以在 PowerShell 中使用 Windows Management Instrumentation (WMI) Win32_Process 物件的屬性和方法。 如需詳細資訊,請參閱 Get-WmiObject 和 WMI SDK。

  • 處理程序的預設顯示是一個包含下列欄位的表格。 如需進程物件之所有屬性的描述,請參閱 處理屬性

    • 控制碼:進程已開啟的控制碼數目。
    • NPM (K) :進程所使用的非分頁式記憶體數量,以 KB 為單位。
    • PM (K) :進程所使用的可分頁記憶體數量,以 KB 為單位。
    • WS (K) :進程的工作集大小,以 KB 為單位。 工作集是由處理程序最近參照的記憶體分頁組成。
    • VM (M) :進程所使用的虛擬記憶體數量,以 MB 為單位。 虛擬記憶體包括磁碟上分頁檔案中的儲存體。
    • CPU (s) :進程在所有處理器上使用的處理器時間,以秒為單位。
    • 識別碼:進程識別碼 (PID) 進程。
    • ProcessName:進程的名稱。 如需處理程序相關概念的說明,請參閱 [說明及支援中心] 中的 [詞彙] 和 [工作管理員] 的 [說明]。
  • 您也可以使用 隨附 Format-Table 之程式的內建替代檢視,例如 StartTimePriority,也可以設計自己的檢視。