如何在 PowerShell 中獲取運行中的進程列表

這篇文章深入探討了利用 PowerShell 進行進程監控,強調了 Get-Process
cmdlet。Get-Process
cmdlet 是進程管理中的基本工具,提供了有關 Windows 機器上運行的進程的全面視圖,顯示了重要信息,如進程 ID、名稱、內存使用情況和 CPU 消耗。
該文章有條理地展開了 cmdlet 的語法和參數,滿足一般和特定進程查詢的需求。
使用 Get-Process
Cmdlet 顯示 PowerShell 中運行進程的列表
在 PowerShell 環境中有超過 200 個可用的 cmdlet。每個 cmdlet 負責執行特定的功能。
Get-Process
是常用的 cmdlet 之一,幫助檢索 Windows 機器上運行的進程列表。
這個 cmdlet 提供有關每個進程的有用信息,如進程 ID、名稱、內存使用情況等。此外,它顯示了系統運行進程的快照。
語法:
Get-Process [[-ProcessName] string[]] [-NameOfTheComputer string[]]
[-FileVersionInfo] [-Module] [CommonParameters]
Get-Process -processID Int32[] [-ComputerName string[]]
[-FileVersionInfo] [-Module] [CommonParameters]
Get-Process -ProcessInputObject Process[] [-ComputerName string[]]
[-FileVersionInfo] [-Module] [CommonParameters]
參數:
ProcessName string[
]: 指定要獲取的進程名稱數組。此參數接受通配符字符以進行模式匹配。如果省略此參數,Get-Process
將檢索所有進程。ProcessId Int32[]
: 指定要檢索的進程 ID。此參數允許您直接針對特定進程。InputObject Process[]
: 指定進程對象的數組。此參數允許您將進程對象傳遞給Get-Process
。NameOfTheComputer string[]
: 指示要在哪些計算機上運行命令的名稱。如果省略此參數,Get-Process
將從本地計算機檢索進程。FileVersionInfo
: 為進程對象添加文件版本信息。當您想要獲取有關進程的可執行文件的詳細信息時(如版本、產品名稱等)非常有用。Module
: 包含每個進程所加載的模塊(DLL 和可執行文件)。這對於更詳細的分析,比如檢查進程加載了哪些 DLL 非常有幫助。[CommonParameters]
: 這些是所有 cmdlet 支持的參數,如-Verbose
、-Debug
、-ErrorAction
、-ErrorVariable
、-OutVariable
、-OutBuffer
和-PipelineVariable
。
這些參數對於 Get-Process
cmdlet 是可選的,您可以根據需求使用這些參數。
顯示所有運行中的進程
我們可以直接使用 Get-Process
命令而不加任何參數。它應該顯示當時所有運行中的進程。
此外,可以使用 gps
別名來替代 Get-Process
命令。
Get-Process
gps
輸出:
執行 Get-Process
或 gps
之一後,PowerShell 開始進行系統範圍的查詢,以收集所有活動進程的信息。這些命令中缺少參數表明 PowerShell 不應該應用任何過濾器,並檢索每個進程的詳細信息。
然後 PowerShell 收集有關每個運行進程的詳細數據。這些數據包括描述這些進程狀態和特徵的各種屬性。
PowerShell 將其格式化為表格以便顯示。這種表格格式旨在以清晰可讀的方式呈現信息。
該表通常包括幾個關鍵列:
Id
: 此列顯示進程識別符 (PID
),每個進程都有一個唯一的數字標籤。PID
是唯一識別和管理特定進程的關鍵。ProcessName
: 這是啟動進程的可執行文件的名稱。它有助於輕鬆識別進程,特別是對於知名應用程序。CPU(s)
: 在這裡,我們看到進程消耗的 CPU 時間。這以秒為單位計量,對於評估哪些進程使用了大量 CPU 資源(可能影響系統性能)至關重要。PM(K)
: 這代表以千字節計的Paged Memory
。它表示進程使用的可被換出的內存大小。這一指標對於監控進程的內存使用情況非常重要,這對於性能調優和資源管理至關重要。
檢索單個進程的信息
使用 PowerShell 檢索特定進程的信息時,我們有幾個語法選項。Get-Process -Name processName
和 Get-Process processName
都是有效的,並達成相同的結果,但在語法結構上略有不同。
Get-Process -Name typora
或
Get-Process typora
當我們執行 Get-Process -Name typora
或 Get-Process typora
中的任一命令時,PowerShell 將過濾運行中的進程並返回名為 typora
的進程的具體信息。當我們知道感興趣的進程的確切名稱時,這特別有用。
在底層,PowerShell 會查看所有進程的列表並與 typora
進行匹配。如果該進程正在運行,它的詳細信息將被顯示。
輸出:
檢索多個進程的信息
當我們在 PowerShell 中使用 Get-Process
cmdlet 來檢索多個進程的信息時,如命令 Get-Process NotePad, Outlook
,我們正在利用 PowerShell 同時處理多個項目的能力。
Get-Process NotePad, Outlook
通過運行 Get-Process NotePad, Outlook
,我們指示 PowerShell 同時獲取多個進程的詳細信息,在這種情況下是 NotePad
和 Outlook
。當我們需要監控幾個特定進程時,這個命令非常方便。
PowerShell 執行與單進程命令類似的操作,但針對每個指定的進程名稱,顯示所有匹配的結果。
輸出:
此外,您可以對進程名稱使用通配符。
檢索具有給定屬性的進程對象
當需要時,我們可以顯示特定屬性的進程對象信息。讓我們僅檢索 NotePad
進程的 Process ID
。
(Get-Process NotePad).Id
在命令 (Get-Process NotePad).Id
中,我們首先獲取 NotePad
的進程對象,然後訪問其 Id
屬性。這種技術在我們只對進程的特定信息(如其 Process ID
)感興趣時非常有用。
輸出:
此外,我們可以檢索 NotePad
進程的 CPU 時間屬性,如下所示。
(Get-Process NotePad).CPU
同樣,(Get-Process NotePad).CPU
獲取 NotePad
進程的 CPU 使用信息。這些命令展示了我們如何從進程對象中提取特定數據點。
輸出:
顯示進程擁有者
Get-Process
命令的默認輸出不顯示 ProcessOwner
屬性。但這在您需要終止特定進程時可能是一個有價值的信息。
我們可以使用 -IncludeUserName
參數將 ProcessOwner
屬性包括在輸出中。
Get-Process -Name notepad -IncludeUserName
命令 Get-Process -Name notepad -IncludeUserName
擴展了 Get-Process
的默認行為,將進程擁有者的用戶名包括在輸出中。當我們需要確定哪位用戶正在運行特定進程時,-IncludeUserName
參數是必不可少的,這在多用戶環境或故障排除中可能至關重要。
這個命令提高了我們對進程的可見性,特別是在其所有權方面。
輸出:
結論
這本綜合指南闡明了 PowerShell 在管理和監控系統進程方面的強大和多功能性。我們從列出所有運行中的進程到定位特定進程,並深入挖掘特定進程屬性的提取。
該文章還展示了 PowerShell 同時處理多個進程的靈活性,以及集成用戶導向信息(如進程所有權)的簡便性。
這種對 Get-Process
cmdlet 的整合凸顯了 PowerShell 在進程管理領域的堅韌性和適應性,為系統管理員提供了一系列工具,以有效地監控、分析和管理 Windows 環境中的進程。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.