---
# System prepended metadata

title: Windwos 效能監視器備忘

---

# Windwos 效能監視器備忘 

情境特定系統資源超過閥值時，處發通知動作 
## 1. 新增通知用PowerShell  
例如: **Cpu.ps1**   

```powersehll
# 定義郵件相關資訊
$smtpServer = "mailgw.demo168.com.tw"
$fromAddress = "noreply@demo168.com.tw"
$toAddress = "demouser@demo168.com.tw"

$ProcessInfo=Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 10
$ProcessTxt=$ProcessInfo | Format-Table -AutoSize | Out-String

$subject = "$env:COMPUTERNAME"+" CPU警戒通知"

# 獲取當前時間
$currentTime = Get-Date -Format "yyyy/MM/dd HH:mm:ss"

$htmlBody = @"
<html>
<body>
<b>目前CPU使用率排名前10</b>
<pre>
$ProcessTxt
</pre>
	<diV>通知時間:　　$currentTime</div>
</body>
</html>
"@

# 創建郵件對象
$mailMessage = New-Object System.Net.Mail.MailMessage
$mailMessage.From = $fromAddress
$mailMessage.To.Add($toAddress)
$mailMessage.Subject = $subject
$mailMessage.Body = $htmlBody
$mailMessage.IsBodyHtml = $true
$mailMessage.SubjectEncoding = [System.Text.Encoding]::UTF8
$mailMessage.BodyEncoding = [System.Text.Encoding]::UTF8

# 創建 SMTP 用戶端對象
$smtpClient = New-Object System.Net.Mail.SmtpClient
$smtpClient.Host = $smtpServer

# 送出郵件
$smtpClient.Send($mailMessage)

# 釋放資源
$mailMessage.Dispose()
$smtpClient.Dispose()
```
## 2. 新增工作排程   
例如: **效能警示專用\CPU使用狀況紀錄**
![image](https://hackmd.io/_uploads/SyVo5IuT6.png)

## 3. 新增Windwos效能監視器中的警示  
例如: **CPU閥值監控**  
  注意這觸發的動作就是剛剛上面工作排程裡面定義的名稱
![image](https://hackmd.io/_uploads/By3VoIO6a.png)

## 4. 設定警示的啟用時機  
    上面設定完預設警示是停用的狀態，雖然在警示的內容裡面有排程可以設定，但能設定的條件都是定時觸發。沒有一開機就自動啟動那種選項。這時候可以去工作排程裡面點開 Microsoft\Windows\PLA那個路徑，找到跟上面效能計數器同名的排程，在這邊就可以新增開機觸發的程序。
    ![image](https://hackmd.io/_uploads/ryDLpUOaa.png)
---
## 使用心得
上面範例只是針對 CPU 用量的部分作處理，基本上 Windwos 效能監視器能抓到的數值，都能用上面的方式警示閥值，當資源消耗超過警戒線時，進行相關後續處理。至於要監控何種數值，使用多少的採樣間隔就看使用的情境與需求了。
