Соответствие SID из AD и просмотра событий - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь создать сценарий, который выполняет поиск заблокированных учетных записей в AD, а также анализирует журнал безопасности в средстве просмотра событий, а затем сравнивает SID и, если они совпадают, отображает информацию о пользователе, у которого есть SID.

Import-Module ActiveDirectory
$PDC = "DOMAINCONTROLLER"
$UserInfo = Search-ADAccount -LockedOut
$LockedOutEvents = Get-WinEvent -ComputerName $PDC -FilterHashtable 
@{LogName='Security';Id=4740} | Sort-Object -Property * -Descending
Foreach($Event in $LockedOutEvents){
If($Event.Properties[2] -Match $UserInfo.SID.value)
{
  $Event | Select-Object -Property @(
    @{Label = 'User'; Expression = {$_.Properties[0].Value}}
    @{Label = 'DomainController'; Expression = {$_.MachineName}}
    @{Label = 'EventId'; Expression = {$_.Id}}
    @{Label = 'LockoutTimeStamp'; Expression = {$_.TimeCreated}}
    @{Label = 'Message'; Expression = {$_.Message -split "`r" | Select -First 1}}
    @{Label = 'LockoutSource'; Expression = {$_.Properties[1].Value}}
    )
}}

Кажется, есть проблема с аргументами в операторе If If($Event.Properties[2] -Match $UserInfo.TargetSID)

Вывод $ Event.Properties [2] выглядит следующим образом:

 Value                                        
 -----                                        
 S-1-1-1-111111111-111111111-111111111-22222

Вывод $ UserInfo.SID.Value:

S-1-1-1-111111111-111111111-111111111-11111 S-1-1-1-111111111-111111111-111111111-11111 S-1-1-1-111111111-111111111-111111111-22222 S-1-1-1-111111111-111111111-111111111-11111 S-1-1-1-111111111-111111111-111111111-11111

Как вы можете видеть, один SID найден в обоих выходах, но при сопоставлении этих двух я получаю "False" какответ.Кто-нибудь знает, почему это происходит?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 22 ноября 2018

Похоже, вы сравниваете объект SecurityIdentifier с массивом строк (по крайней мере, этот вывод выглядит как массив - вы можете использовать $UserInfo.SID.value.GetType(), чтобы убедиться).С вашим текущим кодом есть две проблемы:

  1. Оператор -Match работает только с двумя строками, поэтому вы не можете использовать это здесь.Но вы можете использовать Contains() в массиве.
  2. Вам необходимо преобразовать SecurityIdentifier в строку.Свойство Value делает это.

Попробуйте это:

If ($UserInfo.SID.value.Contains($Event.Properties[2].Value))
...