В Windows логи некоторых приложений/сервисов хранятся не виде бинарных логов Event Viewer (
*.evtx)
, а в виде простых текстовых лог файлов. При диагностике или решении проблемы иногда удобно, чтобы содержимое лог файла выводилось на экран в реальном времени и обновлялось по мере появления в логе новых строк. В Linux для динамического вывода содержимого лог файла на экран обычно используется утилита
tail
. В качестве аналога этой команды для Windows можно использовать PowerShell командлет
Get-Content
.
Следующая команда выведет содержимого лог-файла в консоли и будет отображать новые строки по мере их добавления в лог:
Get-Content -Path "C:\LogFiles\log1.txt" -Wait

CTRL+C
.Недостаток предыдущей команды — она сначала выводит весь лог, и будет отображать новые строки по мере их добавления в файл. Удобнее, когда на экран выводятся только последние строки. Например, чтобы вывести только последние 20 строк и ждать появления новых, добавьте параметр -Tail 20:
Get-Content -Path "C:\LogFiles\log1.txt" -Wait -Tail 5
PowerShell позволит легко выбрать из лог файла в реальном времени только строки, с нужной вам информацией. Например, я хочу вывести из лога файервола только строки, в которых есть встречается определенный IP адрес:
$IP = "37.252.2.22"
Get-Content "C:\windows\system32\LogFiles\Firewall\pfirewall.log" -Tail 40 -Wait | ? { $_ -match $IP }

С помощью PowerShell можно дополнительно раскрасить вывод содержимого лог файла, сделав его более читаемым. Например, я хочу, чтобы строки в логе со словом Success подсвечивались зеленым, а строки с ошибками – красным.
Get-Content C:\Windows\System32\Sysprep\Panther\setupact.log -Wait -Tail 30 | ForEach-Object {
switch -Regex ($_ ) {
"ERROR" { Write-Host $_ -F White -B Red }
"Success" { Write-Host $_ -F Green }
default { Write-Host $_ }
}
}
Теперь вывод лога файла на экране стал намного более читаемым.

Таким образом, PowerShell довольно просто и удобно использовать для отслеживания изменений в содержимом лог файлов в реальном времени. Конечно, PowerShell не очень хорошо справляется с обработкой действительно больших лог-файлов (несколько ГБ), однако с параметром
-Tail
, фактически читается только конец файла, а не весь лог целиком. Это не приводит к большому использованию памяти.

