如何使用 PowerShell 查詢 CPU 和 RAM 使用情況

  1. 如何使用 PowerShell 查找 CPU 和 RAM 使用情況,使用 Get-Counter
  2. 如何使用 PowerShell 查找 CPU 和 RAM 使用情況,使用 Get-WmiObject
  3. 如何使用 PowerShell 查找 CPU 和 RAM 使用情況,使用 Get-Process
  4. 結論
如何使用 PowerShell 查詢 CPU 和 RAM 使用情況

隨著科技進步,系統監控的效率需求變得愈加重要。Windows 管理員和使用者經常尋求快速有效的方法來評估其 Windows 機器的 CPU 和 RAM 使用情況,以達到最佳系統性能。

在本文中,我們將探索 PowerShell 的強大功能,這是一種在 Windows 環境中的多功能腳本語言,並發現它如何被用來無縫地查找和監控 CPU 和 RAM 使用情況。

透過利用 PowerShell 的功能,用戶能夠獲得系統內存使用情況的即時洞察,賦予他們做出明智決策並確保流暢運算體驗的能力。

如何使用 PowerShell 查找 CPU 和 RAM 使用情況,使用 Get-Counter

PowerShell 以其強大的 Cmdlet 提供了獲取即時性能數據的穩健解決方案 retrieve real-time performance data。其中一個 Cmdlet Get-Counter 提供了一種多功能且高效的方式來訪問這些信息。

Get-Counter Cmdlet 使我們能夠從本地或遠端機器獲取性能計數器數據。為了監控 CPU 和 RAM 使用,我們可以使用特定的性能計數器路徑。

以下是基本語法:

 powershellCopyGet-Counter -Counter "\CounterPath"

對於 CPU 使用,計數器路徑為 '\Processor(_Total)\% Processor Time',而對於 RAM 使用,計數器路徑為 '\Memory\Available MBytes'

PowerShell 使用 Get-Counter 查找 CPU 和內存使用的代碼示例

讓我們深入探討一個完整的工作代碼示例,展示如何使用 Get-Counter 來監控 CPU 和 RAM 使用情況:

 powershellCopy# PowerShell get memory usage
Get-Counter '\Processor(_Total)\% Processor Time' -Continuous | ForEach-Object {
    $cpuUsage = $_.CounterSamples.CookedValue
    Write-Host "Current CPU Usage: $cpuUsage%"
}

Get-Counter '\Memory\Available MBytes' -Continuous | ForEach-Object {
    $ramUsage = $_.CounterSamples.CookedValue
    Write-Host "Available RAM: ${ramUsage}MB"
}

讓我們逐步解析代碼的每個部分,以了解其功能。

監控 CPU 使用情況:

 powershellCopyGet-Counter '\Processor(_Total)\% Processor Time' -Continuous | ForEach-Object {
    $cpuUsage = $_.CounterSamples.CookedValue
    Write-Host "Current CPU Usage: $cpuUsage%"
}

在第一部分,我們使用 Get-Counter 獲取有關已用的總處理器時間百分比的即時數據。指定的計數器路徑 '\Processor(_Total)\% Processor Time' 針對所有核心的整體 CPU 使用情況。

-Continuous 參數確保該命令持續運行,提供實時更新,並且只有在按下 CTRL+C 時才會停止。

Get-Counter 的輸出然後通過 ForEach-Object 循環傳遞。對於每個收到的計數器樣本,腳本提取處理的值(CookedValue),表示當前的 CPU 使用百分比。

這個值被存儲在變量 $cpuUsage 中,並透過 PowerShell 函數 Write-Host 在控制台上打印出當前 CPU 使用情況的訊息。

代碼輸出:

PowerShell 記憶體百分比

監控內存使用情況 (RAM):

 powershellCopyGet-Counter '\Memory\Available MBytes' -Continuous | ForEach-Object {
    $ramUsage = $_.CounterSamples.CookedValue
    Write-Host "Available RAM: ${ramUsage}MB"
}

腳本的第二部分專注於監控內存百分比。類似於 CPU 部分,我們使用 Get-Counter 並指定計數器路徑 '\Memory\Available MBytes' 持續獲取有關可用內存的數據,單位為兆字節。

-Continuous 參數確保持續監控。

再次,輸出在 ForEach-Object 循環中被處理。對於每個接收到的計數器樣本,腳本提取表示可用字節的處理值,並將其存儲在變量 $ramUsage 中。

最後一步是使用 Write-Host 在控制台上顯示可用 RAM 資訊。

代碼輸出:

powershell 獲取記憶體使用情況

這種即時信息顯示對於系統管理員和用戶來說都無價,讓他們能夠迅速識別和解決性能問題。Get-Counter 簡化了監控 CPU 和 RAM 使用的過程,成為 PowerShell 工具箱中的一個重要工具。

如何使用 PowerShell 查找 CPU 和 RAM 使用情況,使用 Get-WmiObject

除了 Get-Counter Cmdlet,PowerShell 還提供了另一個強大的工具 Get-WmiObject,用於收集系統信息,包括 CPU 和 RAM 使用情況。

Get-WmiObject Cmdlet 使我們能夠訪問 Windows 管理工具(WMI)類,提供大量有關系統的信息。為了監控 CPU 和實體內存使用情況,查詢特定的 WMI 類和屬性。

基本語法如下:

 powershellCopyGet-WmiObject -Class WMI_Class | Select-Object Property1, Property2, ...

對於 CPU 使用,我們使用 Win32_Processor 類,而對於 RAM 或物理內存使用,則使用 Win32_OperatingSystem 類。

PowerShell 使用 Get-WmiObject 查找 CPU 和 RAM 使用的代碼示例

讓我們探索一個完整的工作代碼示例,展示如何使用 Get-WmiObject 來監控 CPU 和 RAM 使用情況:

 powershellCopy# PowerShell get memory usage of all the processes
$cpuObject = Get-WmiObject -Class Win32_Processor
$cpuLoadPercentage = $cpuObject.LoadPercentage
Write-Host "CPU Load Percentage: $cpuLoadPercentage"

$ramObject = Get-WmiObject -Class Win32_OperatingSystem
$ramUsageGB = [math]::Round(($ramObject.TotalVisibleMemorySize - $ramObject.FreePhysicalMemory) / 1GB, 2)
Write-Host "Available RAM: ${ramUsageGB}GB"

讓我們逐步解析上述 PowerShell 腳本的每個部分,以了解其功能。

監控 CPU 使用情況:

 powershellCopy$cpuObject = Get-WmiObject -Class Win32_Processor
$cpuLoadPercentage = $cpuObject.LoadPercentage
Write-Host "CPU Load Percentage: $cpuLoadPercentage"

在這裡,腳本首先利用 Get-WmiObjectWin32_Processor 類查詢信息,其中包含有關系統處理器的詳細信息。獲得的信息存儲在變量 $cpuObject 中。

隨後,腳本從 $cpuObject 中提取 LoadPercentage 屬性,表示當前的 CPU 負載百分比。這個值然後存儲在變量 $cpuLoadPercentage 中。

最後,使用 Write-Host 在控制台上打印 CPU 負載百分比的訊息。

代碼輸出:

PowerShell 總記憶體使用量

監控內存使用情況 (RAM):

 powershellCopy$ramObject = Get-WmiObject -Class Win32_OperatingSystem
$ramUsageGB = [math]::Round(($ramObject.TotalVisibleMemorySize - $ramObject.FreePhysicalMemory) / 1GB, 2)
Write-Host "Available RAM: ${ramUsageGB}GB"

在 RAM 監控部分,腳本使用 Get-WmiObjectWin32_OperatingSystem 類檢索信息,該類包含與操作系統相關的各種屬性,包括內存相關的詳細信息。獲得的信息存儲在變量 $ramObject 中。

接下來,腳本透過從總物理內存或總可見內存大小 (TotalVisibleMemorySize) 中減去可用的物理內存 (FreePhysicalMemory) 來計算可用 RAM(以千兆字節為單位)。結果然後使用 [math]::Round 四捨五入到小數點後兩位,以確保輸出更整潔。

可用 RAM 值以千兆字節存儲在變量 $ramUsageGB 中。最後,使用 Write-Host 在控制台上打印可用 RAM 的訊息。

代碼輸出:

powershell 釋放記憶體

這些使用 Get-WmiObject Cmdlet 獲得的信息為系統性能提供了寶貴的洞察,使得用戶能夠有效監控資源利用情況並做出明智的系統優化決策。該腳本的簡單性和清晰性使其成為管理員和用戶的多功能工具。

如何使用 PowerShell 查找 CPU 和 RAM 使用情況,使用 Get-Process

作為我們探索如何使用 PowerShell 監控系統性能的一部分,我們現在將專注於 Get-Process Cmdlet。與 Get-CounterGet-WmiObject 不同,Get-Process 提供有關本地計算機上運行的過程的信息,使我們能夠提取 CPU 和內存百分比的細節。

Get-Process Cmdlet 獲取有關當前正在運行的進程的信息 currently running processes,無論是在本地還是遠端計算機。為了監控 CPU 和 RAM 使用,我們將從輸出中過濾並提取相關信息。

基本語法如下:

 powershellCopyGet-Process -Name "ProcessName" | Select-Object Property1, Property2, ...

對於 CPU 使用,我們將關注 CPU 屬性,而對於 RAM 使用,我們將關注 WorkingSet 屬性。

PowerShell 使用 Get-Process 查找 CPU 和 RAM 使用的代碼示例

讓我們探索一個完整的工作代碼示例,展示如何使用 Get-Process 來監控 CPU 和 RAM 使用情況:

 powershellCopy# PowerShell get memory usage
$cpuProcesses = Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
ForEach ($process in $cpuProcesses) {
    $processName = $process.ProcessName
    $cpuUsage = $process.CPU
    Write-Host "Process: $processName, CPU Usage: $cpuUsage%"
}

$ramProcesses = Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5
ForEach ($process in $ramProcesses) {
    $processName = $process.ProcessName
    $ramUsageMB = [math]::Round($process.WorkingSet / 1MB, 2)
    Write-Host "Process: $processName, RAM Usage: ${ramUsageMB}MB"
}

與之前的示例類似,這個 PowerShell 腳本也分為兩個部分:一個專注於 CPU 使用,另一個專注於 RAM 使用。讓我們逐步解析代碼的每個部分。

監控 CPU 使用情況:

 powershellCopy$cpuProcesses = Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
ForEach ($process in $cpuProcesses) {
    $processName = $process.ProcessName
    $cpuUsage = $process.CPU
    Write-Host "Process: $processName, CPU Usage: $cpuUsage%"
}

在第一段代碼中,腳本開始時使用 Get-Process 獲取系統上所有正在運行的進程的信息。然後,輸出根據 CPU 使用情況使用 Sort-Object 進行降序排序。

Select-Object -First 5 確保只考慮 CPU 使用最高的前 5 個進程。生成的進程被存儲在變量 $cpuProcesses 中。

一個 ForEach 循環被用來遍歷 $cpuProcesses 中的每個進程對象。對於每個進程,腳本提取進程名稱 (ProcessName) 和 CPU 使用情況 (CPU)。

這些信息隨後通過 Write-Host 在控制台上顯示,呈現進程名稱以及其相應的 CPU 使用百分比。

代碼輸出:

PowerShell 記憶體百分比

監控內存使用情況 (RAM):

 powershellCopy$ramProcesses = Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5
ForEach ($process in $ramProcesses) {
    $processName = $process.ProcessName
    $ramUsageMB = [math]::Round($process.WorkingSet / 1MB, 2)
    Write-Host "Process: $processName, RAM Usage: ${ramUsageMB}MB"
}

在第二段代碼中,採取了類似的方法。同樣,使用 Get-Process 獲取系統上所有正在運行的進程的信息。

然後,根據 RAM 使用情況 (WorkingSet) 進行降序排序,只選擇最高的前 5 個運行的進程。生成的進程被存儲在變量 $ramProcesses 中。

ForEach 循環遍歷 $ramProcesses 中的每個進程。對於每個進程,腳本提取進程名稱並計算以兆字節為單位的 RAM 使用情況。

計算包括將工作集大小除以 1 兆字節,並使用 [math]::Round 將結果四捨五入到小數點後兩位。然後,將這些信息通過 Write-Host 在控制台上顯示,呈現進程名稱以及其相應的 RAM 使用情況(以兆字節為單位)。

代碼輸出:

PowerShell 記憶體使用量

該腳本提供了一種動態的方法來監控 CPU 和內存使用,重點集中在資源消耗最大的進程上。通過利用 Get-Process 的能力,管理員和用戶可以洞察系統中資源密集型活動的情況。

結論

監控 CPU 和 RAM 使用對於維護健康和響應迅速的計算環境至關重要。PowerShell 及其豐富的 Cmdlet 集合提供了強大的工具,如 Get-CounterGet-WmiObjectGet-Process 來簡化這一過程。

無論您是偏好即時更新、詳細的 WMI 類信息,或是單個進程的洞察,PowerShell 都提供靈活的解決方案以滿足多樣的監控需求。通過將這些技術納入您的系統管理工具包,您可以輕鬆隨時瞭解 CPU 和 RAM 使用情況,實現及時干預和主動系統優化。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website