建立警示並呼叫 Powershell 發送 Event Mail
今天要來簡單地演示一下如何在SQL Server建立警示並呼叫Powershell取得Event後發送通知Mail
首先在SQL Server Agent建立一個新的警示
然後輸入警示的名稱,以及選定的類型、引發警示的條件、訊息關鍵字...等
然後再選取回應,並按下新增作業
此時就會開始建立相對應的作業
雖然也可以在此步驟開始設定使用Database Mail的通知方式
但本次是要以Powershell來讀取Event Logs並寄送Mail
輸入作業名稱,並可自行調整其owner…等設定
本次的重點在建立步驟,類型要選擇【PowerShell】
並且在命令欄可直接使用PowerShell Script
最後附上簡單的範例語法
$event = get-eventlog -logname Application -After (Get-Date).AddMinutes(-5) | Select EntryType, EventID, Source, Message | Where {$_.Source -in "MSSQLSERVER", "Microsoft-Windows-WMI" -and $_.EntryType -in "Information", "Warning", "Error", "Critical"}
if ($event.Count -ge 1)
{
foreach ($item in $event)
{
$SMTPServer = "mail.com"
$SMTPPort = "587"
$Username = "username@mail.com"
$Password = "password"
$to = "toUsername@mail.com"
$cc = "ccUsername@mail.com"
$subject = "【" + $item.EntryType + "】" + $env:COMPUTERNAME + " EventID : " + $item.EventID
$body = $item.Message
$message = New-Object System.Net.Mail.MailMessage
$message.subject = $subject
$message.body = $body
$message.to.add($to)
$message.cc.add($cc)
$message.from = $username
$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message)
}
}
收到的Mail範例像這個樣子
have fun ʕ•͡ᴥ•ʔ