ve1l

check_users_a_groups

Oct 11th, 2021 (edited)
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.89 KB | None | 0 0
  1. $lastday = ((Get-Date).AddDays(-10))
  2. $users = Get-ADUser -filter {(whencreated -ge $lastday)}
  3. $groups = Get-ADGroup -filter {(whencreated -ge $lastday)}
  4.  
  5. Function Get-ADEvent {
  6. [CmdletBinding()]
  7.  
  8. Param(
  9. # массив с идентификаторами для проверки событий
  10. [array]$EventID = @(4732),
  11. # поиск логов от указанной даты
  12. [datetime]$BeginTime,
  13. # тип события, которые мы ищем Удача/Провал
  14. [ValidateSet("Success","Failure")]
  15. [array]$EventType,
  16. # IP/DNS имя удаленного компьютера
  17. [string]$ComputerName
  18. )
  19.  
  20. Process {
  21.  
  22. # составляем массив для поиска
  23. $log_table = @{
  24. LogName='Security';
  25. ProviderName='Microsoft-Windows-Security-Auditing';
  26. ID=$EventID;
  27. }
  28. # ниже проверяем какие параметры переданы пользователем
  29. # и добавляем их в массив
  30.  
  31. # пользователь указал дату
  32. if ($BeginTime){
  33. $log_table += @{StartTime=$BeginTime}
  34. }
  35. # пользователю нужен только успех/провал
  36. if ($EventType -eq 'Success'){
  37. $log_table += @{Keywords=9007199254740992}
  38. }
  39. elseif ($EventType -eq 'Failure') {
  40. $log_table += @{Keywords=4503599627370496}
  41. }
  42.  
  43. $parameters = @{
  44. FilterHashtable=$log_table
  45. }
  46. # если пользователь указал удаленный компьютер
  47. if ($ComputerName){
  48. $parameters += @{ComputerName=$ComputerName}
  49. }
  50. # передаем все параметры в команду
  51. $events = Get-WinEvent @parameters
  52.  
  53. # массив, который вернем пользователю
  54. # со всеми событиями
  55. $formatted_events = @()
  56.  
  57. foreach ($event in $events){
  58. # проверяем каждое событие
  59. # и устанавливаем для него свое описание
  60. Switch ($event.ID) {
  61. 4732 {
  62. $Description = "Добавлен новый пользователь"
  63. Break
  64. }
  65. Default {
  66. # если его идентификатор не найден
  67. $Description = $event.Message
  68. Break
  69. }
  70. }
  71. # определяем тип события
  72. if ($event.KeywordsDisplayNames -like '*Success*'){$type = 'Успех'}
  73. else {$type = 'Провал'}
  74.  
  75. # преобразовываем сид в буквенное обозначение
  76. function Sid-Convert {
  77.  
  78. [CmdletBinding()]
  79. param (
  80. [string]$eventsid
  81. )
  82.  
  83. $sid = $eventsid;
  84. $objSID = New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList $sid;
  85. $sidname = $objSID.Translate([System.Security.Principal.NTAccount]).Value;
  86. Write-Output $sidname
  87.  
  88. }
  89.  
  90. # создаем массив текущего события
  91. # и добавляем его к остальным найденным
  92. $formatted_events += [PSCustomObject]@{
  93. "Дата создания" = (Get-Date $event.TimeCreated -Format "dd-MM-yyyy HH:mm");
  94. "ID" = $event.ID;
  95. "Описание" = $Description;
  96. "Тип" = $type;
  97. "Цель (имя)" = Sid-Convert -eventsid $event.Properties[1].Value;
  98. "Кем (имя)" = Sid-Convert -eventsid $event.Properties[4].Value;
  99. "Кем (компьютер)" = Sid-Convert -eventsid $event.Properties[5].Value;
  100. "Цель (SID)" = $event.Properties[2].Value;
  101. "Кем (SID)" = $event.Properties[3].Value;
  102. }
  103. }
  104. # возвращаем составленный массив пользователю
  105. return $formatted_events
  106. }
  107. }
  108. $eventmsg = Get-ADEvent -ComputerName 'имя пк' -BeginTime (Get-Date).AddDays(-10)
  109. $eventmsg.getType().Fullname
  110. $evntmsgout = $eventmsg Out-String
  111. $evntmsgout.getType().Fullname
  112.  
  113. #$eventmsg = Get-EventLog security | ?{$_.eventid -eq 4732} | select message
  114. #$getgrpmod = Get-AdGroup -filter * -Properties Modified | Where {$_.Modified -ge $lastday} | Where {$_.name -match "adm|адм"}
  115. #Get-ADGroup -Filter {Name -like "adm"} -Properties * #Members | Get-ADGroupMember
  116. #$admgrp = foreach ($g in $test){Get-ADGroup $g -Properties Members | Where {$_.Modified -lt $lastday}}
  117. #$getmembgrp = foreach($u in $getgrpmod){Get-ADGroup $u -Properties Members | Get-ADGroupMember | Where {$_.objectClass -match "user"} | select SamAccountName}
  118.  
  119. $admusr = foreach($m in $getmembgrp) {Get-ADUser -identity $m.SamAccountName -Properties Modified | Where {$_.Modified -ge $lastday}}
  120.  
  121. $arrusers = foreach($user in $users){'<tr><td>' + $user.Name + ' ' + $user.SamAccountName + '</td>' + '<td> ' + $group.DistinguishedName + '</td></tr>'}
  122. $arrgroups = foreach($group in $groups){'<tr><td>' + $group.SamAccountName + '</td>' + '<td>' + $group.DistinguishedName + '</td></tr>'}
  123. $body = '<h4>' + 'Созданные пользователи за последние 24 часа ' + $lastdayusers + '</h4><br>' + '<table border="1" width="100%" cellpadding="5">'+
  124. $arrusers + '</table>' + '<br>' + '<h4>' + 'Созданные группы за последние 24 часа ' + $lastdaygruops + '</h4><br>'+
  125. '<table border="1" width="100%" cellpadding="5">' + $arrgroups + '</table>'+
  126. '</table>' + '<br>' + '<h4>' + 'Мониторинг админских групп за 24 часа ' + $lastdayusers + '</h4><br>'+
  127. '<table border="1" width="100%" cellpadding="5">' + $evntmsgout + '</table>'#| out-string
  128.  
  129.  
  130. Send-MailMessage -From 'почта' -To 'почта' -Subject 'users and groups created in the last 24 hours' -Body $body -BodyAsHtml -SmtpServer 'smtp.домен.ru' -Encoding 'UTF8'
Add Comment
Please, Sign In to add comment