Как мониторить появление новых строк в файле в PowerShell
Как настроить уведомления по появлении новых строк в файле
Если вам нужно наблюдать за логами (журналами) в которых появляются новые строки, то в Windows имеется удобный инструмент для этого. Вам не нужно ничего дополнительно устанавливать или настраивать — всё необходимое уже имеется на всех актуальных версиях Windows.
Следить за появлением новых строк в файле можно с помощью командлета PowerShell. Если запустить командлет Get-Content с опцией -Wait, то будет выведено имеющееся содержимое файла, но командлет не прекратит свою работу. Опция -Wait заставляет командлет ждать неопределённое время, оставляя файл открытым, пока выполнение команды не будет прервано. Во время ожидания Get-Content проверяет файл раз в секунду и выводит новые строки, если они есть.
Синтаксис запуска Get-Content для мониторинга изменений файла:
Get-Content FILE -Wait
В следующем примере будет показано содержимое файла access.log, который находится в папке C:\Server\bin\Apache24\logs\, после этого программа продолжит работу и будет выводить новые добавляемые строки:
Get-Content C:\Server\bin\Apache24\logs\access.log -Wait
Смотрите также: Как в PowerShell прочитать содержимое файла. Как сохранить содержимое файла в переменную
При удалении любой строки из файла весь файл выводится заново.
При использовании с параметром -TotalCount командлет Get-Content ожидает, пока указанное количество строк не станет доступным в указанном файле. Например, если вы укажете -TotalCount, равный 10, и файл уже содержит 10 или более строк, Get-Content вернёт 10 строк и завершит работу. Если в файле менее 10 строк, Get-Content выводит каждую строку по мере её поступления, но перед выходом ждёт, пока не появится десятая строка.
Вы можете прервать -Wait, нажав Ctrl+C. Удаление файла вызывает ошибку, которая также прерывает выполнение командлета.
Как мониторить появление новых записей сразу в нескольких файлах
В качестве опции Get-Content можно указать несколько файлов через запятую, например:
Get-Content FILE1,FILE2,FILE3,FILE4 -Wait
Но с опцией -Wait данная команда не будет работать так, как вы ожидаете — на экран будет выводится только содержимое первого файла. В целом это похоже на баг.
Тем не менее, вы можете добиться аналогичного результата — мониторинг нескольких файлов журналов — для этого просто откройте несколько терминалов и запустите в каждом из них Get-Content с указанием интересующего вас файла, например:
Get-Content FILE1 -Wait Get-Content FILE2 -Wait
Связанные статьи:
- Аналоги cat, tail, head и wc в PowerShell (100%)
- Как в PowerShell прочитать содержимое файла. Как сохранить содержимое файла в переменную (100%)
- Ошибки «Оператор "<" зарезервирован для использования в будущем» и «The '<' operator is reserved for future use.» (РЕШЕНО) (71.5%)
- Как в PowerShell сохранить вывод в файл (аналоги > и >>) (50%)
- Аналог echo в PowerShell (50%)
- Как в PowerShell в выводимой таблице убрать шапку и оставить только данные (RANDOM - 50%)