使用 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
我有一台计算机在串行端口上记录来自设备的事件。 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