Get-eventlog: как получить все журналы (приложения, системы, безопасности и т. Д.) С помощью powershell

Я пытаюсь прочитать все файлы журнала из EventLog с помощью командлета Get-Eventlog

Get-EventLog -LogName Application, Security -after 09/15/2016 -Before 09/17/2016

Вместо -LogName Application мне нужны все журналы, такие как Приложение, Система, Безопасность и т. Д.

Любая помощь?

2 ответа

Вы можете получить все журналы событий, как это:

(Get-WinEvent –ListLog * -ErrorAction SilentlyContinue).LogName

А затем либо выполните цикл по ним, чтобы получить события из каждого из журналов, либо попробуйте передать весь массив как -LogName Но я могу представить себе, что снижение производительности будет огромным в этом случае.

Также, Get-WinEvent был разработан, чтобы заменить Get-EventLog, так что вы можете использовать его вместо. Вот некоторая информация: http://blog.netwrix.com/2015/04/06/monitoring-event-logs-with-powershell/

Вот рабочий код, основанный на ответе @andrey-marchuk. Весь лог складывается в один файл( ⚠ сохранить файл с кодировкой UTF-8 with BOMиз-за @)

      $Begin = '10/02/2022 09:00:00'
$End = '10/02/2022 09:15:05'
$path= "C:\Users\user\Desktop\logevent\\"
If(!(test-path $path))
{
      New-Item -ItemType Directory -Force -Path $path
}
$datetimenow =  [DateTime]::Now.ToString("yyyy_MM_dd HH_mm_ss")
$allLog = (Get-WinEvent –ListLog * -ErrorAction SilentlyContinue).LogName
foreach ($lognameName in $allLog){
Get-WinEvent -FilterHashtable @{logname = $lognameName; StartTime = "$Begin"; EndTime = "$End" }  | Select-Object * | Out-File -Enc UTF8 -Append "$path $datetimenow winevent.txt"
}

Если вы хотите получить только конкретную информацию о событиях, замените Select-Object *чем-то вроде Select-Object TimeCreated, ID, LogName, Source, LevelDisplayName, Message


Если вы хотите отдельные файлы для каждого logname, вы можете сделать это, но будьте осторожны, это создаст> 400 файлов:

      $Begin = '10/02/2022 09:00:00'
$End = '10/02/2022 09:15:05'
$path= "C:\Users\user\Desktop\logevent\\"
If(!(test-path $path))
{
      New-Item -ItemType Directory -Force -Path $path
}
$allLog = (Get-WinEvent –ListLog * -ErrorAction SilentlyContinue).LogName

foreach ($lognameName in $allLog){
$lognameFile = $lognameName.Replace("/", "-")
$datetimenow =  [DateTime]::Now.ToString("yyyy_MM_dd HH_mm_ss")
Get-WinEvent -FilterHashtable @{logname = $lognameName; StartTime = "$Begin"; EndTime = "$End" }  | Select-Object * | Out-File -Enc UTF8 -FilePath "$path $datetimenow winevent $lognameFile .txt"

}
Другие вопросы по тегам