PowerShell脚本需求:持续监控更新文本并统计指定字符串实例数
如何用PowerShell持续监控日志文件并统计指定字符串的出现次数(覆盖写入结果)
我有一个从游戏持续更新数据的文本文件,希望编写PowerShell脚本,持续监控该文件并统计其中指定文本字符串“Ride On Received”的实例数,将统计结果写入另一个文本文件或CSV,且新计数需覆盖旧计数。当前我已有代码:
$FileContent = Get-Content "Log.txt" $Matches = Select-String -InputObject $FileContent -Pattern "Ride On Received" -AllMatches $Matches.Matches.Count请问如何修改以实现持续监控及覆盖写入计数的功能?
我来帮你改造这个脚本,完美实现持续监控和覆盖写入的需求,下面是完整方案:
完整修改后的脚本
# 配置参数 - 可根据你的实际路径和需求调整 $logPath = "Log.txt" $outputPath = "RideOnCount.txt" # 换成 "RideOnCount.csv" 即可输出CSV格式 $targetString = "Ride On Received" $checkInterval = 5 # 每次检查的间隔秒数 # 无限循环实现持续监控 while ($true) { # 读取整个日志文件(-Raw参数提升大文件读取效率) $fileContent = Get-Content -Path $logPath -Raw # 统计目标字符串的总出现次数 $matches = Select-String -InputObject $fileContent -Pattern $targetString -AllMatches $currentCount = $matches.Matches.Count # 覆盖写入结果到目标文件 # 文本文件模式:直接写入数字 $currentCount | Out-File -Path $outputPath -Force # 如果需要CSV格式(带时间戳),注释上面的行,启用下面的代码 # [PSCustomObject]@{ # 统计时间 = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # 出现次数 = $currentCount # } | Export-Csv -Path $outputPath -NoTypeInformation -Force # 等待指定间隔后再次检查 Start-Sleep -Seconds $checkInterval }
关键功能说明
- 持续监控:通过
while ($true)创建无限循环,脚本会一直运行直到你手动按下Ctrl+C停止。 - 高效读取:添加
-Raw参数一次性读取整个文件,比逐行读取更适合大日志文件的场景。 - 覆盖写入:
-Force参数确保每次写入都会完全覆盖目标文件的旧内容,保证文件里永远是最新的计数。 - 灵活配置:开头的参数可以自由调整——比如修改检查间隔、输出文件路径,或者切换文本/CSV输出格式。
CSV格式的额外说明
如果选择CSV输出,每次统计的结果会包含精确到秒的时间戳和当前总次数,虽然是覆盖写入,但能直观看到最新统计的时间点,适合需要追溯的场景。
停止脚本的方法
当你需要终止监控时,直接在PowerShell窗口按下Ctrl+C即可,脚本会立刻停止运行。
内容的提问来源于stack exchange,提问作者Stephen Cousins
相关产品推荐
相关产品推荐

