一、數(shù)據(jù)處理過程
- 在WinSer執(zhí)行排程腳本遠程控制DC作業(yè),導(dǎo)出7天內(nèi)帳號的鎖定EventLog;
- 通過WinSer中轉(zhuǎn)至LinuxSer;
- 在LinuxSer執(zhí)行排程對數(shù)據(jù)進行格式化,過濾出(50次/月)的數(shù)據(jù)。
- 通過訪問訪問\\WinSer可訪問共享,(每28天的星期三)拿到處理過的文件(ad20170101.txt..)
二、腳本
- 腳本一:
因Windows默認(rèn)不允許直接在排程運行powshell腳本(服務(wù)器有更多限制),所以選擇運行Bat腳本調(diào)用運行。
powershell D:\PS\AccountLockOut\Start-AccountLockOut.ps1
- 腳本二:
發(fā)送本地腳本文件到DC上執(zhí)行(便于管理)。
$CredUser="ikulin" #定義用戶
$PWD=ConvertTo-SecureString "Iku963" -AsPlainText -Force #定義密碼,轉(zhuǎn)換安全字符,強制明文
$Cred=New-Object System.Management.Automation.PSCredential($CredUser,$PWD) #定義認(rèn)證對象
Invoke-Command -FilePath "D:\PS\AccountLockOut\Get-AccountLockOut.ps1" -ComputerName 10.10.10.10 -Credential $Cred
net use \\DC\D$\PS\AccountLockOut Iku963.. /u:ikulin
robocopy \\DC \D$\PS\AccountLockOut D:\PS\AccountLockOut\LOG
net use \\LinuxSer\ad passwd /u:username
robocopy D:\PS\AccountLockOut\LOG \\LinuxSer\ad
net use /d * /y
- 腳本三:
讀取7天內(nèi)帳號的鎖定日志并導(dǎo)出csv文件。
[CmdletBinding()]
param(
[INT]$Num=7
)
$After=((Get-Date).adddays(-$Num+1)).ToString('yyyy-MM-dd')
$Before=(Get-Date).ToString('yyyy-MM-dd')
$Filename="D:\PS\AccountLockOut\"+"$After"+'-'+"$Before"+'.csv'
Get-EventLog -LogName Security -After $After -InstanceId 4740 |
select @{Name="USER";Expression={(($_.Message).Split(":"))[8].Trim().Split("")[0]}},
@{Name="TIME";Expression={$_.TimeGenerated}},
@{Name="COMPUTER";Expression={(($_.Message).Split(":"))[10].Trim()}} |
Export-Csv -Encoding UTF8 -path "$Filename" -Force
2.2 LinuxSer服務(wù)器
- 腳本四:
使用shell腳本過得數(shù)據(jù)。
#!/bin/bash
#Date:2017-09-21
#Version:1.0.0
#Author:linxianyu
#Description:Format out for AD AccountLock.csv
#將鎖定次數(shù)超過50次的帳號統(tǒng)計并存入變量a
a=$(cut -d ',' -f 1 $@ | sort | uniq -c | sort -n |
awk -F ' ' '{ if ($1>50) print $1,$2 }' |
tr -d '"' )
#打印變量a的內(nèi)容
#因從變量輸入原格式會改變,所以有awk對輸出格式化
echo $a|
awk -F ' ' ' BEGIN{printf "%15-s %10-s \n","Statistics","Account";
print "-----------------------------"}
{ for(i=1;i<=NF;i++){if(i%2==1){printf "%-10s \t",$i } else{printf "%-10s\n",$i}}}
END{print "-----------------------------"}'
#將變量a中的帳號篩選并存入變量b
b=$(echo $a | awk -F ' ' '{for(i=1;i<=NF;i++){if(i%2==0){print $i }}}')
#for循環(huán)數(shù)組變量b中的帳號并再次查找、統(tǒng)計、打印
#若同一帳號在不同pc上登陸則分開打印
for i in ${b[@]};
do
grep "$i" $@ |
cut -d "," -f1,3 |
cut -d ":" -f2 |
sort -t ',' -k2 |
sed -e 's#"##g' -e 's#,#\t#g' |
#清除pcname中與帳號同名的行
grep "^$i" |
uniq -c |
sort -b -k2
done
- 腳本六:
調(diào)用tj.sh統(tǒng)計腳本,計算周期。
#!/bin/bash
#Date:20171121
#Version:1.0
#Discription: The creat date for tj.sh
path=/backup/ad
cd $path
#測試文件是否存在
[ -e missionnum ]
if [ $? = 0 ];
then
#查看運行資料
num=$(cat missionnum)
#定義循環(huán)4次(周)調(diào)用一次腳本
mouth=4
#判斷是否滿足4周
if [ $num -ne $mouth ];
then
#循環(huán)計數(shù)+1
echo $[ num += 1 ] > missionnum
else
#定義文件名
filename=$(date +"ad%Y%m%d.txt")
#查找4周內(nèi)產(chǎn)生的日志并調(diào)用執(zhí)行腳本tj.sh
find -name "2017-*" -mtime -28 | xargs sh tj.sh > $filename
#進行l(wèi)inux to windows文本格式轉(zhuǎn)換
unix2dos $filename
#重置計數(shù)
echo 1 > missionnum
fi
else
#若無計數(shù)文件則創(chuàng)建(因第一次執(zhí)行后值因為2所以直接賦值2)
echo 2 > missionnum
fi
-
- 腳本七:
計劃任務(wù)調(diào)用mission.sh腳本。
08 17 * * 3 sh /backup/ad/mission.sh
三、文件
#TYPE Selected.System.Diagnostics.EventLogEntry
"USER","TIME","COMPUTER"
"Administrator","2017/11/29 下午 12:14:18","PC1"
"USER1","2017/11/29 下午 12:06:53","PC2"
"USER3","2017/11/29 下午 12:02:35","PC3"
"USER6","2017/11/29 上午 11:53:51","PC9"
"Administrator","2017/11/29 上午 11:48:39","PC2"
[root@bogon ~]# cat /backup/ad/ad20171122.txt
Statistics Account
-----------------------------
60 USER1
161 USER3
482 USER9
971 Administrator
-----------------------------
60 USER1 PC2
100 USER3 PC3
30 USER3 PC4
31 USER3 PC11
209 USER9 PC6
273 USER9 PC100
531 Administrator PC1
440 Administrator PC2
文章名稱:統(tǒng)計頻繁被鎖定的AD帳號
分享路徑:
http://weahome.cn/article/jjhodd.html