gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:35:43 25 4
gpt4 key购买 nike

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

这给我 tail -f 功能,我在 linux 上得到了。问题是我不知道如何将此命令的输出提供给另一个 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 只写入一次我在 powershell 中 Ctrl+C 以阻止它运行。

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

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

非常感谢。

最佳答案

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

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

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

关于windows - 使用 Windows Powershell 从实时(更新)日志文件中过滤字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28005726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com