Мониторинг текстового лог-файла при помощи Powershell

В одной системе возникла необходимость выводить на экран журнал работы сервера приложений, и сделать так, чтобы при появлении определённой ошибки раздавался звуковой сигнал. С первой задачей неплохо справляется Far Manager. Система работала на сервере Windows, и журнал, открытый на просмотр с сетевого диска, постоянно обновляется. Однако, пищать Far не умеет.

В Powershell для постоянного вывода содержимого файла на экран можно использовать команду Get-Content:

Get-Content -path W:\TEST\srv-app01\server1\SystemOut.log -wait

Эта команда с ключом -wait действует аналогично юниксовому tail -f, только выводит на экран весь файл, и нельзя указать количество последних строк для вывода.

Предположим, что нас интересуют события с идентификатором WSVR060*, и пищать нужно только при появлении события WSVR0605W.

Чтобы система пищала при возникновении в логе ошибки, можно воспользоваться двумя способами:

Способ 1. Вывод специального символа `a:

get-content -path W:\TEST\srv-app01\server1\SystemOut.log -wait | Select-String "WSVR060" | foreach { Write-Host $_ ; if ($_ -like "*WSVR0605W*") { Write-Host `a }}

При этом выдаётся стандартный сигнал, длительность и тон которого фиксированы.

Способ 2. Инструкция [console]::Beep выдаёт звуковой сигнал заданной длительности (в миллисекундах) и частоты (в Гц):

get-content -path W:\TEST\srv-app01\server1\SystemOut.log -wait | Select-String "WSVR060" | foreach { Write-Host $_ ; if ($_ -like "*WSVR0605W*") { [console]::Beep(700,300) }}

Так при желании можно сделать, чтобы разные ошибки пищали на разный лад.

Мониторинг текстового лог-файла при помощи Powershell: 2 комментария

  1. Алекей

    А как обстоят дела на Windows 7 ?
    Попробовал эту конструкцию и у меня все равно звук выводится в колонки, а не на спикер.

    1. Админ Сайта

      У меня тоже звук выводился в колонки, и происходило это как раз на Windows 7.
      Меня на тот момент это полностью устраивало.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *