pogo
22-05-2014, 16:28
Спасибо за отзывы в теме (http://forum.oszone.net/thread-282461.html), но что-то готовые решения аудита оказались очень дорогими.
В итоге решил попробовать сделать подобное скриптом.
Как включить аудит для стандартных телодвижений в AD написано тут (http://winitpro.ru/index.php/2013/06/11/audit-izmeneniya-v-active-directory/)
В инете был найден скрипт и слегка модифицирован:
$objExcel = New-Object -comobject Excel.Application
$objExcel.visible = $True
$objWorkbook = $objExcel.Workbooks.Add()
$objSheet = $objWorkbook.Worksheets.Item(1)
$objSheet.Cells.Item(1,1) = "Server"
$objSheet.Cells.Item(1,2) = "LogName"
$objSheet.Cells.Item(1,3) = "Time"
$objSheet.Cells.Item(1,4) = "Source"
$objSheet.Cells.Item(1,5) = "EventID"
$objSheet.Cells.Item(1,6) = "Message"
$objSheet.Cells.Item(1,7) = "UserName"
$objSheetFormat = $objSheet.UsedRange
$objSheetFormat.Interior.ColorIndex = 19
$objSheetFormat.Font.ColorIndex = 11
$objSheetFormat.Font.Bold = $True
$row = 1
$servers = Get-Content D:\scripts\ps\servers.txt
foreach ($server in $servers)
{
$row = $row + 1
#$AppLog = Get-EventLog -LogName Application -computer $server -Newest 5
$SecLog = Get-EventLog -LogName Security -ComputerName $server -Newest 10 -ea SilentlyContinue | where {$_.EventID -eq 4624}
#$SysLog = Get-EventLog -LogName System -computer $server -Newest 5
#foreach ($cat in $AppLog,$Syslog,$Seclog)
foreach ($cat in $SecLog)
{
#if ($cat -is [array])
#{
#if ($AppLog -contains $cat[0]) {$Catname = "Application"}
if ($SecLog -contains $cat[0]) {$Catname = "Security"}
#if ($SysLog -contains $cat[0]) {$Catname = "System"}
Foreach ($event in $cat)
{
$objSheet.Cells.Item($row,1).Font.Bold = $True
$objSheet.Cells.Item($row,1) = $server
$objSheet.Cells.Item($row,2) = $Catname
$objSheet.Cells.Item($row,3) = $Event.TimeGenerated
$objSheet.Cells.Item($row,4) = $Event.Source
$objSheet.Cells.Item($row,5) = $Event.EventID
$objSheet.Cells.Item($row,6) = $Event.Message
#$objSheet.Cells.Item($row,7) = $Event.Message | where {$_ -match "(\s|^)Account\sName"} #Select-String "Account"
$row = $row + 1
}
#}
}
}
$objSheetFormat = $objSheet.UsedRange
$objSheetFormat.EntireColumn.AutoFit()
$objSheetFormat.RowHeight = 15Закомментированые строки нужны для того, что бы получать логи не только из журнала "Безопасность\Security", но для аудита они не нужны.
В процессе написания возникла проблема, которую пока не удалось решить.
Надо что бы в таблице было ещё одно поле, userName, что бы можно было сразу посмотреть, когда последний раз осуществляла логин какая-то учётка.
Для примера вот кусок сообщения $Event.Message от EventID=4624
New Logon:
Security ID: DOMAIL\user10
Account Name: user10
Account Domain: Domain
Logon ID: 0x533df4e2a0
Logon GUID: {c1fcf540-9843-1112-b2a8-8fds3c3dcfd}И надо что бы в это последнее поле userName записывалось значение Account Name, т.е. user10.
Подскажите пожалуйста, как это можно реализовать?
В итоге решил попробовать сделать подобное скриптом.
Как включить аудит для стандартных телодвижений в AD написано тут (http://winitpro.ru/index.php/2013/06/11/audit-izmeneniya-v-active-directory/)
В инете был найден скрипт и слегка модифицирован:
$objExcel = New-Object -comobject Excel.Application
$objExcel.visible = $True
$objWorkbook = $objExcel.Workbooks.Add()
$objSheet = $objWorkbook.Worksheets.Item(1)
$objSheet.Cells.Item(1,1) = "Server"
$objSheet.Cells.Item(1,2) = "LogName"
$objSheet.Cells.Item(1,3) = "Time"
$objSheet.Cells.Item(1,4) = "Source"
$objSheet.Cells.Item(1,5) = "EventID"
$objSheet.Cells.Item(1,6) = "Message"
$objSheet.Cells.Item(1,7) = "UserName"
$objSheetFormat = $objSheet.UsedRange
$objSheetFormat.Interior.ColorIndex = 19
$objSheetFormat.Font.ColorIndex = 11
$objSheetFormat.Font.Bold = $True
$row = 1
$servers = Get-Content D:\scripts\ps\servers.txt
foreach ($server in $servers)
{
$row = $row + 1
#$AppLog = Get-EventLog -LogName Application -computer $server -Newest 5
$SecLog = Get-EventLog -LogName Security -ComputerName $server -Newest 10 -ea SilentlyContinue | where {$_.EventID -eq 4624}
#$SysLog = Get-EventLog -LogName System -computer $server -Newest 5
#foreach ($cat in $AppLog,$Syslog,$Seclog)
foreach ($cat in $SecLog)
{
#if ($cat -is [array])
#{
#if ($AppLog -contains $cat[0]) {$Catname = "Application"}
if ($SecLog -contains $cat[0]) {$Catname = "Security"}
#if ($SysLog -contains $cat[0]) {$Catname = "System"}
Foreach ($event in $cat)
{
$objSheet.Cells.Item($row,1).Font.Bold = $True
$objSheet.Cells.Item($row,1) = $server
$objSheet.Cells.Item($row,2) = $Catname
$objSheet.Cells.Item($row,3) = $Event.TimeGenerated
$objSheet.Cells.Item($row,4) = $Event.Source
$objSheet.Cells.Item($row,5) = $Event.EventID
$objSheet.Cells.Item($row,6) = $Event.Message
#$objSheet.Cells.Item($row,7) = $Event.Message | where {$_ -match "(\s|^)Account\sName"} #Select-String "Account"
$row = $row + 1
}
#}
}
}
$objSheetFormat = $objSheet.UsedRange
$objSheetFormat.EntireColumn.AutoFit()
$objSheetFormat.RowHeight = 15Закомментированые строки нужны для того, что бы получать логи не только из журнала "Безопасность\Security", но для аудита они не нужны.
В процессе написания возникла проблема, которую пока не удалось решить.
Надо что бы в таблице было ещё одно поле, userName, что бы можно было сразу посмотреть, когда последний раз осуществляла логин какая-то учётка.
Для примера вот кусок сообщения $Event.Message от EventID=4624
New Logon:
Security ID: DOMAIL\user10
Account Name: user10
Account Domain: Domain
Logon ID: 0x533df4e2a0
Logon GUID: {c1fcf540-9843-1112-b2a8-8fds3c3dcfd}И надо что бы в это последнее поле userName записывалось значение Account Name, т.е. user10.
Подскажите пожалуйста, как это можно реализовать?