IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

如何利用系統產生的Event ID‧再寄送系統管理員電郵

01. 今天同事問了,如何當AD用戶更改密碼後,可以用電郵通知系統管理員。想想之前做了用『Task Scheduler』,當用戶插入手寫板後,自動執行某程式。今天應該可以照板煮碗。

02. 當AD用戶更改密碼後,Event Viewer便會產生Event ID: 4723。

03. 執行『Task Scheduler』,再按『Create Task』。

04. 選擇上面『General』欄位,輸入『Name』,再選擇『Run whether user is logged on or not』及勾選『Run with highest privileges』。

05. 選擇上面『Triggers』欄位,再按『New』。

06. 在『Begin the task』位置選擇『On an event』。

07. 在『Log』位置選擇『Security』,『Source』位置選擇『Microsoft Windows security auditing』,『Event ID』位置當然輸入『4723』,下面勾選『Enabled』。

08. 選擇上面『Actions』欄位,再按『New』。

09. 正常只要在『Action』位置選擇『Send an e-mail(deprecated)』,再輸入相關SMTP資料便可以了。但天知Microsoft在Microsoft Windows Server 2012後,已不支援『Send an e-mail』選項。

10. 既然簡單方法不能用,那就自己來一個PowerShell程式來發送郵件。在『Action』位置選擇『Start a program』,在『Program/script』位置輸入『Powershell.exe』,在『Add arguments(optional)』輸入『-ExecutionPolicy Bypass c:\\scripts\\email_sent_when_password_changed.ps1 』(PowerShell程式名稱是email_sent_when_password_changed.ps1,檔案是放在c:\\scripts資料夾內)。

powershell.exe -ExecutionPolicy Bypass c:\\scripts\\email_sent_when_password_changed.ps1
email_sent_when_password_changed.ps1檔案內容是:
$array = Get-WinEvent -FilterHashtable @{Logname='Security';ID=4723} -MaxEvents 1 | Select-Object -Property timecreated, @{label='username';expression={$_.properties[0].value}}
foreach ($line in $array) {
$t = $line.timecreated
$u = $line.username
}
$fromaddress = "sender@company.com" 
$toaddress = "receiver@company.com" 
$Subject = "User: $u changes its AD password at $t"
$body = "Password changed!!!" 
$smtpserver = "smtp.server.com" 
$message = new-object System.Net.Mail.MailMessage 
$message.From = $fromaddress 
$message.To.Add($toaddress) 
$message.IsBodyHtml = $True 
$message.Subject = $Subject 
$message.body = $body 
$smtp = new-object Net.Mail.SmtpClient($smtpserver) 
$smtp.Send($message)

11. 輸入系統管理員密碼,便成功建立任務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *