使用 windows powershell 从实时(更新)日志文件中过滤字符串

filter string from live (updating) log file using windows powershell

我有一台计算机在串行端口上记录来自设备的事件。 Putty 正在将它们记录到一个文件中。

我曾经在 Linux 机器上安装过这个 运行。基本上会 tail -f event.log >> script.sh

这是 *nix 脚本

#!/bin/bash

outfile=sras_pages.log

while read -r line
do
    IFS=' ' read -ra split <<< "$line"
    [[ ${split[1]} == AC/BATT_PWR ]] && echo "${line:9:29}"
    [[ ${split[1]} == COMM-FAULT ]] && echo "${line:9:29}"
done >> "$outfile"

基本上我只想将包含上述两个字符串的字符位置 9-29 转发到一个由寻呼终端监视的文件。

Linux 选项现在消失了,我只能使用 windows。我刚刚了解 windows PowerShell,并一直试图通过我在网上找到的示例来解决这个问题。

我是从这个开始的:

Get-Content -Path C:\temp\SRAS\alarm.log -tail 1 -Wait

这让我获得了 linux 的 tail -f 功能。问题是我不知道如何将此命令的输出提供给另一个 PowerShell 脚本。

然后我把它拼凑起来

$p = @("AC/BATT_PWR","COMM-FAULT")
Get-Content -Path C:\temp\SRAS\alarm.log -tail 1 -Wait | Select-String -Pattern $p -SimpleMatch | Set-Content C:\temp\SRAS\sras_pages.log

有效,除了文件 sras_pages.log 只写入一次 我 Ctrl+C 在 powershell 中停止它来自 运行.

我需要的是监控一个定期更新的日志文件,任何与字符串匹配的事件在发生时附加到一个单独的文件中。

我对 powershell 了解不够,无法执行此操作,正在寻求帮助。

非常感谢。

Set-Content 覆盖文件的内容,因此它在刷新之前等待所有内容并将所有内容写入文件。 Add-Content 追加到文件,这更适合将随着时间的推移继续写入的脚本,但就像 Set-Content 一样,它会锁定文件并在脚本完成或取消时刷新。

Out-File 但是也支持追加,并且不锁定文件。因此,您可以尝试将 Set-Content 命令替换为:

Out-File -FilePath "C:\temp\SRAS\sras_pages.log" -Append