使用 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" 篩選特定事件來源,快速定位系統問題並生成報表,方便管理。
