PowerShell 監控 Windows Server

PowerShell 監控 Windows Server:CPU、記憶體與事件日誌完整教學

使用 PowerShell 監控 Windows Server 能快速取得系統 CPU 使用率、記憶體狀態、磁碟剩餘空間及事件日誌訊息,方便自動化管理與報表生成。透過案例示範完整監控流程,並結合每日排程自動生成 CSV 報表,讓系統管理更有效率。

PowerShell 監控基礎概念

在企業環境中,Windows Server 承載各種應用與服務,維護穩定性非常重要。透過 PowerShell 可以快速收集系統資訊、CPU 與記憶體使用率、磁碟空間以及事件日誌,方便自動化監控與問題排查。以下是三個實務案例:

案例一:透過 Get-WmiObject Win32_Processor | Select-Object LoadPercentage 取得 CPU 使用率,並寫入報表,方便監控每日負載。

案例二:使用 Get-WmiObject Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize 監控記憶體,計算使用量百分比,及時發現高記憶體占用的服務。

案例三:搭配 Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" 查詢磁碟剩餘空間,並篩選低於 10GB 的磁碟,以提示管理員清理空間或增加容量。

建立自動化監控腳本

建立 PowerShell 腳本前,先建立資料夾與檔案,方便管理與排程:

項目說明
腳本資料夾C:\Scripts
報表存放C:\ServerMonitorReport.csv
# 【執行於 PowerShell 視窗】
Set-Location C:\
New-Item -Path "C:\Scripts" -ItemType Directory
notepad C:\Scripts\ServerMonitor.ps1
# 建立並編輯監控腳本

在 ServerMonitor.ps1 中撰寫完整監控流程,包括 CPU、記憶體、磁碟與事件日誌:

# 【ServerMonitor.ps1 範例】
$report = @()

# 案例一:CPU 使用率
$cpu = Get-WmiObject Win32_Processor | Select-Object LoadPercentage
$report += [PSCustomObject]@{Date=Get-Date; Metric="CPU"; Value=$cpu.LoadPercentage}

# 案例二:記憶體使用率
$memory = Get-WmiObject Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize
$usedMemPercent = (1 - $memory.FreePhysicalMemory / $memory.TotalVisibleMemorySize) * 100
$report += [PSCustomObject]@{Date=Get-Date; Metric="Memory"; Value="$([math]::Round($usedMemPercent,2))%"}

# 案例三:磁碟空間
$disks = Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3"
foreach ($disk in $disks) {
    $freeGB = [math]::Round($disk.FreeSpace/1GB,2)
    $totalGB = [math]::Round($disk.Size/1GB,2)
    $report += [PSCustomObject]@{Date=Get-Date; Metric="$($disk.DeviceID) Disk"; Value="$freeGB/$totalGB GB"}
    if ($freeGB -lt 10) { Write-Host "警告:磁碟 $($disk.DeviceID) 空間不足 $freeGB GB" }
}

# 事件日誌(錯誤事件)
$events = Get-EventLog -LogName System -EntryType Error -Newest 10
foreach ($e in $events) {
    $report += [PSCustomObject]@{Date=$e.TimeGenerated; Metric="Event"; Value="$($e.Source): $($e.Message)"}
}

# 匯出 CSV 報表
$report | Export-Csv "C:\ServerMonitorReport.csv" -NoTypeInformation
Write-Host "監控報表已生成: C:\ServerMonitorReport.csv"

FAQ 常見問題

可以自動寄送監控報表嗎?

可以,使用 Send-MailMessage 將 CSV 或文字報表寄送至管理員 Email,結合排程每日自動執行,確保系統狀態即時掌握,方便管理 Windows Server。

PowerShell 可以遠端監控多台伺服器嗎?

可以,使用 Invoke-Command 搭配 PowerShell Remoting (WinRM) 同時監控多台 Windows Server,集中管理多伺服器狀態,減少人工巡檢。

如何監控特定事件日誌來源?

可在 Get-EventLog 使用 -Source "來源名稱"-EntryType "Error" 篩選特定事件來源,快速定位系統問題並生成報表,方便管理。

    PAGE TOP