[實務運用] 建立 SQL Server 警示並呼叫 Powershell 發送通知 Mail

建立警示並呼叫 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 ʕ•͡ᴥ•ʔ