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

  1. 使用 Get-Process Cmdlet 顯示 PowerShell 中運行進程的列表
  2. 結論
如何在 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-Processgps 之一後,PowerShell 開始進行系統範圍的查詢,以收集所有活動進程的信息。這些命令中缺少參數表明 PowerShell 不應該應用任何過濾器,並檢索每個進程的詳細信息。

然後 PowerShell 收集有關每個運行進程的詳細數據。這些數據包括描述這些進程狀態和特徵的各種屬性。

PowerShell 將其格式化為表格以便顯示。這種表格格式旨在以清晰可讀的方式呈現信息。

該表通常包括幾個關鍵列:

  1. Id: 此列顯示進程識別符 (PID),每個進程都有一個唯一的數字標籤。PID 是唯一識別和管理特定進程的關鍵。
  2. ProcessName: 這是啟動進程的可執行文件的名稱。它有助於輕鬆識別進程,特別是對於知名應用程序。
  3. CPU(s): 在這裡,我們看到進程消耗的 CPU 時間。這以秒為單位計量,對於評估哪些進程使用了大量 CPU 資源(可能影響系統性能)至關重要。
  4. PM(K): 這代表以千字節計的 Paged Memory。它表示進程使用的可被換出的內存大小。這一指標對於監控進程的內存使用情況非常重要,這對於性能調優和資源管理至關重要。

檢索單個進程的信息

使用 PowerShell 檢索特定進程的信息時,我們有幾個語法選項。Get-Process -Name processNameGet-Process processName 都是有效的,並達成相同的結果,但在語法結構上略有不同。

Get-Process -Name typora

Get-Process typora

當我們執行 Get-Process -Name typoraGet-Process typora 中的任一命令時,PowerShell 將過濾運行中的進程並返回名為 typora 的進程的具體信息。當我們知道感興趣的進程的確切名稱時,這特別有用。

在底層,PowerShell 會查看所有進程的列表並與 typora 進行匹配。如果該進程正在運行,它的詳細信息將被顯示。

輸出:

獲取進程 -名稱

檢索多個進程的信息

當我們在 PowerShell 中使用 Get-Process cmdlet 來檢索多個進程的信息時,如命令 Get-Process NotePad, Outlook,我們正在利用 PowerShell 同時處理多個項目的能力。

Get-Process NotePad, Outlook

通過運行 Get-Process NotePad, Outlook,我們指示 PowerShell 同時獲取多個進程的詳細信息,在這種情況下是 NotePadOutlook。當我們需要監控幾個特定進程時,這個命令非常方便。

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 使用信息。這些命令展示了我們如何從進程對象中提取特定數據點。

輸出:

獲取進程 CPU

顯示進程擁有者

Get-Process 命令的默認輸出不顯示 ProcessOwner 屬性。但這在您需要終止特定進程時可能是一個有價值的信息。

我們可以使用 -IncludeUserName 參數將 ProcessOwner 屬性包括在輸出中。

Get-Process -Name notepad -IncludeUserName

命令 Get-Process -Name notepad -IncludeUserName 擴展了 Get-Process 的默認行為,將進程擁有者的用戶名包括在輸出中。當我們需要確定哪位用戶正在運行特定進程時,-IncludeUserName 參數是必不可少的,這在多用戶環境或故障排除中可能至關重要。

這個命令提高了我們對進程的可見性,特別是在其所有權方面。

輸出:

Get-Process IncludeUserName

結論

這本綜合指南闡明了 PowerShell 在管理和監控系統進程方面的強大和多功能性。我們從列出所有運行中的進程到定位特定進程,並深入挖掘特定進程屬性的提取。

該文章還展示了 PowerShell 同時處理多個進程的靈活性,以及集成用戶導向信息(如進程所有權)的簡便性。

這種對 Get-Process cmdlet 的整合凸顯了 PowerShell 在進程管理領域的堅韌性和適應性,為系統管理員提供了一系列工具,以有效地監控、分析和管理 Windows 環境中的進程。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

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.