# 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 效能監視器能抓到的數值,都能用上面的方式警示閥值,當資源消耗超過警戒線時,進行相關後續處理。至於要監控何種數值,使用多少的採樣間隔就看使用的情境與需求了。