這個需求其實已經有很久了,以前沒有很熟悉怎麼使用Powershell,但經年累月之後,現在終於能寫出一些心得,這次是把Windows的Log撈出來之後,擷取最新有關帳號被鎖定的部分,在自動發信給管理員,有別於以往有人被鎖後我都不知道怎麼幫他撈取資料並分析原因,現在又這個shell script之後,以後查詢原因時應該會很方便!
Get-EventLog -LogName Security -InstanceID 4625 -Newest 1 | select -property * > C:\accounts\locked-accounts.txt ##撈取最新一筆事件id為4625的資料,並轉成txt檔
(Get-Content C:\accounts\locked-accounts.txt |Select-String Index) -replace ('Index','') -replace (':','') > C:\accounts\index2.txt ##撈取txt檔中文字的index,並去除不並要的字元
$Status=(Get-Content C:\accounts\locked-accounts.txt | Select-String -pattern '失敗原因') -replace ('失敗原因:','') -replace ('%%','') #設定變數,撈取txt檔中文字的「失敗原因」資訊,並去除不並要的字元
$Index1=Get-Content C:\accounts\old_logs\index1.txt ##設定變數index1,作為放置舊index number,並將資訊丟到另一層資料夾的txt檔
$Index2=Get-Content C:\accounts\index2.txt ##設定變數index2,作為放置新index number,並將資訊匯到現有目錄的txt檔
$mailSubject=”AD帳號鎖定通知與訊息“ ##設定寄件主旨變數
$Mailto="administrators@maildomain" ##設定寄件對象變數
$Body=“有帳號鎖定通知,請查看附件“ ##設定郵件內容變數
echo $Status > C:\accounts\Status.txt
if ($Status = 2307) ##條件一:失敗原因代碼為2307
{
if ($Index2 -gt $Index1) ##條件二:index2大於index1
{
(Get-Content C:\accounts\locked-accounts.txt | Select-String -pattern 'TimeWritten','帳戶名稱','帳戶網域','工作站名稱','來源網路位址','來源連接埠') > C:\accounts\messages\locked-messages.txt ##擷取log資訊中的相關資訊,並儲存於messages資料夾的txt檔
echo $Index2 > C:\accounts\old_logs\index1.txt ##把新的index覆蓋舊的index
Send-MailMessage -From "admin@maildomain -To $Mailto -Subject $mailSubject -Body $Body -attachment C:\accounts\messages\locked-messages.txt -SmtpServer "172.16.0.30" -Encoding ([System.Text.Encoding]::UTF8) ##發信給管理員並挾帶messages檔
}
echo $Index2 > C:\accounts\old_logs\index1.txt
}
echo $Index2 > C:\accounts\old_logs\index1.txt
最後就是把這個shell放到工作排程器上,每五分鐘執行一次,就可以檢視效果了。
沒有留言:
張貼留言