Powershell: получение журналов событий на основе диапазона дат - PullRequest
0 голосов
/ 05 марта 2020

Приведенный ниже скрипт Powershell отлично работает. Он попадает в мой журнал просмотра событий, фиксирует все события для определенного события за последние 24 часа и экспортирует его во временный файл. Сейчас я пытаюсь изменить этот скрипт, чтобы он показывал мне только данные из следующего диапазона дат (7 января 2020 г. - 6 февраля 2020 г.). Для жизни я не могу понять это. Кто-нибудь знает, как добавить диапазон дат?

Get-WinEvent -ProviderName $ProviderName -MaxEvents 64000 -EA SilentlyContinue | Where-Object 
  $_.id -in $EventID -and $_.Timecreated -gt (Get-date).AddHours(-24)
} | Sort TimeCreated -Descending | Export-Csv $Path -NoTypeInformation

Ответы [ 3 ]

0 голосов
/ 05 марта 2020

В вашем предложении Where-Object вам нужно проверить, чтобы $_.TimeCreated было больше Jan. 7, 2020 12:00:00 AM и меньше Feb. 6, 2020 11:59:59 PM:

$startTime = Get-Date -Date "Jan. 7, 2020 12:00:00 AM"
$endTime = Get-Date -Date "Feb. 6, 2020 11:59:59 PM"

Get-WinEvent .... | Where-Object {
  $_.id -eq $EventID -and $_.TimeCreated -ge $startTime -and $_.TimeCreated -le $endTime
}

Это работает, поскольку Get-Date -Date ожидает DateTime объект, PowerShell знает, как неявно преобразовать правильно отформатированные строки даты в DateTime объект. Затем вам просто нужно убедиться, что свойство TimeCreated каждого события находится между нижней и верхней границами.


См. Эту статью для получения дополнительной информации о том, как PowerShell "Преобразование типов Волхвы c " работает.

0 голосов
/ 05 марта 2020

Вы можете использовать фильтры builltin, чтобы сделать это, и это будет еще быстрее. Чтобы преодолеть ограничение в 256 логинов, используйте foreach l oop. То же самое с более чем 846 именами провайдеров. Уже отсортировано по времени по убыванию. Вау, это может вернуть до 1151 события.

get-winevent @{ providername = 'esent'; id = 916;
  starttime = '1/7'; endtime = '2/6' } -MaxEvents 3


   ProviderName: ESENT

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
2/5/2020 11:09:00 PM           916 Information      svchost (3120,G,0) The beta feature EseDiskFlushConsistency is enabled in ESENT due to the beta site mode settings 0x800000.
2/5/2020 10:08:59 PM           916 Information      svchost (3120,G,0) The beta feature EseDiskFlushConsistency is enabled in ESENT due to the beta site mode settings 0x800000.
2/5/2020 9:08:00 PM            916 Information      svchost (3120,G,0) The beta feature EseDiskFlushConsistency is enabled in ESENT due to the beta site mode settings 0x800000.
0 голосов
/ 05 марта 2020

Поскольку вы используете $_.id -in $EventID, я понимаю, что переменная $EventID представляет собой массив идентификаторов событий. Если нет, и это один идентификатор события, измените -in на -eq.

Чтобы получить дату создания в диапазоне, вы можете сделать:

$startDate = (Get-Date -Year 2020 -Month 1 -Day 7).Date   # .Date makes it midnight
$endDate   = (Get-Date -Year 2020 -Month 2 -Day 6).Date

Get-WinEvent -ProviderName $ProviderName -MaxEvents 64000 -ErrorAction SilentlyContinue | 
    Where-Object { $_.id -in $EventID -and $_.Timecreated -ge $startDate -and $_.Timecreated -lt $endDate } |
    Sort-Object TimeCreated -Descending | Export-Csv $Path -NoTypeInformation

Видя, что было некоторое недопонимание относительно использования .Date, небольшое объяснение:

Использование свойства .Date означает, что вы отбрасываете текущее время и получаете дату в полночь, потому что в этот момент дата меняется.

Приведенный выше код будет фильтровать между датой начала включительно и датой окончания эксклюзивно , поэтому все события создаются с января. 7 2020 00: 00: 00 до, , но не включая Фев. 6 2020 будет возвращено.
В этом случае последнее возвращенное событие может быть в фев. 5 2020 23: 59: 59 .

Если вы хотите, чтобы события возвращались к , включая дату окончания, просто добавьте к ней 1 день, как в

$endDate = (Get-Date -Year 2020 -Month 2 -Day 6).Date.AddDays(1)

Теперь все события созданы с Янв. 7 2020 00: 00: 00 до, , но не включая Фев. 7 2020 будут возвращены. (включая все события, произошедшие 6 февраля 2020 года).
В этом случае последнее возвращенное событие может быть в февраля. 6 2020 23: 59: 59 .

Надеюсь, что это объяснит.

...