對使用 PowerShell Get-Process cmdlet 來顯示系統中運行的進程感興趣嗎?使用 Get-Process
可以找到進程所有者、進程ID,甚至是進程在磁盤上的位置。
在這篇文章中,您將通過實際例子學習如何使用 PowerShell 的 Get-Process
cmdlet。如果在Windows或Linux上操作進程聽起來像是一種樂趣,那就繼續閱讀吧!
相關: 如何使用 ps、pgrep、pkill 等在Linux中終止進程!
先決條件
在繼續之前,以下是本文示例所需的先決條件。
- 儘管Windows PowerShell 5.1對於大多數示例已經足夠,但需要 PowerShell 7.1 及更高版本 以支持Linux。
- 本文使用的是Windows 10和Ubuntu 20.04 LTS,但任何運行PowerShell的操作系統都將適用。
準備好了嗎?讓我們深入了解並管理一些進程吧!
顯示運行中的進程
Get-Process
管理本地進程。在這個第一個例子中,您正在使用 PowerShell Get-Process c
mdlet。此命令顯示所有正在運行的進程。
Get-Process
返回系統正在運行的進程信息的時間點快照。要顯示實時進程信息,Windows 提供了 Windows 任務管理器,而 Linux 提供了 top 命令。
要開始,打開 PowerShell 控制台並運行 Get-Process
。請注意,Get-Process
返回正在運行的進程信息,如下所示。輸出格式對於 Windows 和 Linux 操作系統是相同的。

Get-Process
cmdlet on Windows to display local processes.默認情況下,
gps
或ps
作為Get-Process
的命令別名存在。由於 PowerShell 7 是跨平台的,ps
命令與 內置的 Linux 命令 衝突。因此,在 Linux 上不會工作,僅限gps
別名。
Get-Process
輸出的含義可能不是立即顯而易見的。下面更詳細地描述了默認的 Get-Process
屬性。
- NPM(K) – 進程正在使用的非分頁內存量,以千字節為單位,由
(K)
表示。 - PM(M) – 進程正在使用的分頁內存量,以兆字節顯示,如
(M)
符號所示。 - WS(M) – 進程工作集的大小,以兆字節顯示。工作集包括進程最近引用的內存頁面。
- VM(M) – 進程正在使用的虛擬內存量,以兆字節顯示。包括磁盤上的分頁文件中的存儲。
- CPU(S) – 進程在所有進程上使用的處理器時間量,以秒為單位顯示。
- Id – 進程的進程ID(PID)。
- SI – 正在運行的進程的會話標識符。會話
0
表示進程對所有用戶都可用,1
表示進程存在於第一個登錄的用戶下,以此類推。 - ProcessName – 正在運行的進程的名稱。
要顯示映射到完整屬性名稱的屬性別名列表,請使用命令
Get-Process | Get-Member -MemberType 'AliasProperty'
。
以下是另一個很好的例子。對於它找到的每個brave進程實例,它使用該進程的ID($_.id
)並將其傳遞給Get-NetTCPConnection
。然後PowerShell使用Get-NetTCPConnection
來查找brave進程打開的每個網絡連接的信息。
在您的 PowerShell 會話中運行以下代碼,當 Brave 瀏覽器 正在運行時。
感謝Jay Adams 在 SystemFrontier 上的貢獻!
恭喜,您現在可以使用 Get-Process
在 Windows 和 Linux 上查看所有運行中的進程!
查找特定進程屬性
Get-Process
返回許多不同的運行中進程屬性,就像您之前看到的那樣。與所有其他 PowerShell 對象一樣,您可以有選擇地提取對象上的屬性。
現在讓我們通過一個簡單的示例來演示如何檢索特定進程的特定屬性:
- 啟動您的 Windows 計算器。
2. 使用打開的 PowerShell 控制台,運行 Get-Process
,使用 Name
參數僅顯示名稱為 Calculator 的所有運行中進程。您將看到先前看到的相同輸出。
Get-Process
返回許多屬性,正如預期的那樣。也許您只想查找 CPU 利用率,值位於 CPU(s)
列下。請將 Get-Process
命令放在括號中,並像下面顯示的那樣引用 CPU
屬性。您將看到它僅返回 CPU
屬性的值。
請注意,
Get-Process
返回一個名稱叫做CPU(s)
,而上面的程式碼片段僅使用了CPU
這個名稱。有時 PowerShell 在輸出中不會顯示真實的屬性名稱。這個概念是通過 PS1XML 格式文件 實現的。
CPU 時間以跨核心的總秒數表示。為了將其轉換為更易讀的數字,可以使用 Math
方法將其四捨五入到最近的十分位,如下所示。

您可以使用上述方法查找任何其他屬性,例如
Id
,如果您只想看到進程的 ID。
保持 計算器 應用程序運行。您將在後面的示例中使用此應用程序。
檢索進程記憶體使用情況
解決運行緩慢的系統問題可能是一項挑戰,受限的記憶體通常是造成問題的原因之一。繼續使用 計算器 應用程式,檢索 計算器
進程,並僅顯示 VM
屬性。如下所示,顯示了使用的記憶體量,以兆字節(MB)表示。

Calculator
process memory usage.為了幫助理解記憶體使用情況,請使用內建的PowerShell轉換乘數將兆位(MB)轉換為吉位(GB)。在下面的示例中,您將把記憶體使用量轉換為GB,然後使用.NET數學庫的Round
方法來四捨五入值,如下面的截圖所示。
使用內建的PowerShell工具來轉換值可以更容易理解輸出。繼續閱讀以了解如何查找進程的ID。

揭示較少知名的屬性
並非所有屬性都包含在Get-Process
中,也不是所有屬性都在預設情況下顯示。在下面繼續閱讀以了解有關Path
和UserName
屬性的更多信息以及如何使用它們!
發現進程二進制文件所在位置
在系統上,進程可執行文件可以存儲在多個地方。如果一個進程正在運行,即使Path
不會以預設方式顯示,Get-Process
也可以輕鬆找到進程的文件系統路徑。如下所示,Path
屬性包含進程可執行文件的文件系統位置。

Get-Process
to display a process’s full file system path on Windows.就像在Windows中一樣,在Linux中Get-Process
也會返回文件系統路徑。在下面的例子中,gnome-calculator
進程正在運行,路徑顯示在控制台輸出中。

Get-Process
to display a process’s full file system path on Linux.狡猾的壞人可能會將一個進程命名為與信任的進程相同或類似。因此,定位文件系統路徑的能力有助於安全事件響應(IR)場景。繼續閱讀以了解如何找到進程所有者,因為UserName
未包含在默認輸出中。
查找進程所有者
為了在輸出中包含UserName
值,您需要使用IncludeUserName
參數。了解進程所有者的重要性尤其是為了避免無意中終止另一個用戶的進程。如下所示,UserName
屬性現在包含在進程輸出中。

Calculator
process on Windows.最後,繼續閱讀了解如何在遠程計算機上使用Get-Process
檢索進程信息!
在遠程計算機上查找進程
雖然在Windows PowerShell中,Get-Process
本身沒有任何遠程功能,但您總是可以利用PowerShell Remoting和Invoke-Command
在遠程計算機上運行它。
相關: 如何在 Windows 和 Linux 上設置 PSRemoting
但是,如果您在 Linux 上,或者在 Windows 上運行 PowerShell 6,您現在可以使用ComputerName
參數查詢遠程計算機上的進程。
在 PowerShell 7.x 中,
-ComputerName
參數已被移除,因為該 cmdlet 與遠程控制無直接關係。要實現相同效果,您可以將其包裹在Invoke-Command
中,如下所示:Invoke-Command -ComputerName "ComputerName" -ScriptBlock { Get-Process -ProcessName 'process' }
當對遠程計算機運行上述命令時,顯示的輸出與在本地運行Get-Process
命令時相同。
以下是遠程連接到另一台計算機並獲取正在運行的進程的示例:

您可以通過用逗號分隔它們來定位多台計算機,例如:
Get-Process -ComputerName SRV1,SRV2.
下一步
在本文中,您已經學會如何使用PowerShell Get-Process
cmdlet 在本地和遠程計算機上查找正在運行的進程,包括 Linux 和 Windows。
現在,您將如何應用這些知識?嘗試將Get-Process
檢索的進程傳遞到本地或遠程計算機上的Stop-Process
以終止!
Source:
https://adamtheautomator.com/powershell-get-process/