Guest User

Untitled

a guest
Oct 11th, 2021
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. Function Get-ADEvent {
  2. [CmdletBinding()]
  3.  
  4. Param(
  5. # массив с идентификаторами для проверки событий
  6. [array]$EventID = @(4732),
  7. # поиск логов от указанной даты
  8. [datetime]$BeginTime,
  9. # тип события, которые мы ищем Удача/Провал
  10. [ValidateSet("Success","Failure")]
  11. [array]$EventType,
  12. # IP/DNS имя удаленного компьютера
  13. [string]$ComputerName
  14. )
  15.  
  16. Process {
  17.  
  18. # составляем массив для поиска
  19. $log_table = @{
  20. LogName='Security';
  21. ProviderName='Microsoft-Windows-Security-Auditing';
  22. ID=$EventID;
  23. }
  24. # ниже проверяем какие параметры переданы пользователем
  25. # и добавляем их в массив
  26.  
  27. # пользователь указал дату
  28. if ($BeginTime){
  29. $log_table += @{StartTime=$BeginTime}
  30. }
  31. # пользователю нужен только успех/провал
  32. if ($EventType -eq 'Success'){
  33. $log_table += @{Keywords=9007199254740992}
  34. }
  35. elseif ($EventType -eq 'Failure') {
  36. $log_table += @{Keywords=4503599627370496}
  37. }
  38.  
  39. $parameters = @{
  40. FilterHashtable=$log_table
  41. }
  42. # если пользователь указал удаленный компьютер
  43. if ($ComputerName){
  44. $parameters += @{ComputerName=$ComputerName}
  45. }
  46. # передаем все параметры в команду
  47. $events = Get-WinEvent @parameters
  48.  
  49. # массив, который вернем пользователю
  50. # со всеми событиями
  51. $formatted_events = @()
  52.  
  53. foreach ($event in $events){
  54. # проверяем каждое событие
  55. # и устанавливаем для него свое описание
  56. Switch ($event.ID) {
  57. 4732 {
  58. $Description = "Добавлен новый пользователь"
  59. Break
  60. }
  61. Default {
  62. # если его идентификатор не найден
  63. $Description = $event.Message
  64. Break
  65. }
  66. }
  67. # определяем тип события
  68. if ($event.KeywordsDisplayNames -like '*Success*'){$type = 'Успех'}
  69. else {$type = 'Провал'}
  70.  
  71. # преобразовываем сид в буквенное обозначение
  72. function Sid-Convert {
  73.  
  74. [CmdletBinding()]
  75. param (
  76. [string]$eventsid
  77. )
  78.  
  79. $sid = $eventsid;
  80. $objSID = New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList $sid;
  81. $sidname = $objSID.Translate([System.Security.Principal.NTAccount]).Value;
  82. Write-Output $sidname
  83.  
  84. }
  85.  
  86. # создаем массив текущего события
  87. # и добавляем его к остальным найденным
  88. $formatted_events += [PSCustomObject]@{
  89. "Дата создания" = (Get-Date $event.TimeCreated -Format "dd-MM-yyyy HH:mm");
  90. "ID" = $event.ID;
  91. "Описание" = $Description;
  92. "Тип" = $type;
  93. "Цель (имя)" = Sid-Convert -eventsid $event.Properties[1].Value;
  94. "Кем (имя)" = Sid-Convert -eventsid $event.Properties[4].Value;
  95. "Кем (компьютер)" = Sid-Convert -eventsid $event.Properties[5].Value;
  96. "Цель (SID)" = $event.Properties[2].Value;
  97. "Кем (SID)" = $event.Properties[3].Value;
  98. }
  99. }
  100. # возвращаем составленный массив пользователю
  101. return $formatted_events | ft
  102. }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment