Назад | Перейти на главную страницу

Разница между двумя скриптами PowerShell

Я получил сценарий, который должен сканировать журналы событий 4 контроллеров домена в поисках идентификатора события 4740 (блокировка пользователя). Это сценарий номер 1. Я подумал про себя: «Зачем сканировать все контроллеры домена, если я могу сканировать журнал контроллера домена, на котором работает эмулятор PDC?» Итак, я нашел другой сценарий, который выполняет ту же работу, только быстрее ... Теперь у меня 4 вопроса:

  1. Есть ли у PDCe собственный журнал или это «общий» журнал DC?
  2. Оба сценария ссылаются на один и тот же источник?
  3. Почему первый занимает около часа, а второй - около 15 секунд?
  4. Почему второй скрипт выдает результат только за 8 часов?

Первый сценарий:

$DD = get-date -format d
$DD
$L = get-eventlog -logname security -computername dc1, dc2, dc3, dc4 -after $DD | where {$_.eventid -eq 4740 } | ft -autosize timegenerated.replacementstrings
$L
$L >> locked.accounts.txt 

Второй сценарий:

$PDC = Get-ADDomainController -Discover -Service PrimaryDC
Get-WinEvent -ComputerName $PDC -Logname Security -FilterXPath "*[System[EventID=4740 and TimeCreated[timediff(@SystemTime) <= 604800000]] and
 EventData]" | 
Select-Object TimeCreated,@{Name='User Name';Expression={$_.Properties[0].Value}},@{Name='Source Host';Expression={$_.Properties[1].Value}} 

Оба сценария ссылаются на один и тот же источник?

Да, оба имеют в виду журнал безопасности. Но твой get-eventlog тянет только с одного DC.

  • get-eventlog -logname security -computername dc1, dc2, dc3, dc4
  • Get-WinEvent -ComputerName $ PDC -Logname Security

Почему второй скрипт выдает результат только за 8 часов?

Не уверен, я бы предположил, часовые пояса. С -after вы фильтруете данные после даты, которую вы сохранили в $DD, который, я думаю, округлится до ближайшего целого дня. Я считаю, что данные журнала событий хранятся с указанием даты и времени в формате UTC. Тем не мение. Вам нужно будет использовать правильную переменную даты, которая фактически определяет желаемое время, включая часовой пояс.

$ DD = get-date -format d $ L = get-eventlog ... -after $ DD

Почему первый занимает около часа, а второй - около 15 секунд?

Отчасти это потому, что вы запрашиваете полдюжины компьютеров вместо одного. Но другая часть в том, что Get-WinEvent значительно быстрее, потому что он может обрабатывать большую часть фильтрации на удаленном компьютере и отправлять по сети только те биты, которые вам действительно нужны. get-eventlog в основном передает все записи журнала событий на ваш компьютер, который затем выполняет фильтрацию.

Вот несколько статей, в которых рассказывается подробнее.

Есть ли у PDCe собственный журнал или это «общий» журнал DC?

Не уверен, что вы здесь спрашиваете, и / или я не знаю.