【发布时间】:2020-07-17 09:01:15
【问题描述】:
我有一个 .log 文件,它不断向自己添加行,我正在尝试制作一个 Powershell 脚本,当在 .log 文件的最新行中检测到相应的字符串时,它将启动两个批处理脚本中的一个。到目前为止,这是我所拥有的:
while ($True) {
Write-Output 'Enter <ctrl><c> to break out of this loop.'
Start-Sleep -Seconds 1
Copy-Item -LiteralPath "C:\LocationOfFile\latest.log" -Destination "C:\Users\Diogo\Desktop\Detector"
Rename-Item -Path "C:\Users\Diogo\Desktop\Detector\latest.log" -NewName "latest.txt"
Get-Content -Path "latest.txt" -tail 1 -wait | Select-String -Quiet '§6§lP§e§lrof'
if (System.Boolean -eq True) {
Invoke-Item result1.bat
Read-Host -Prompt "Press Enter to continue"
}
else {
Get-Content -Path "latest.txt" -tail 1 -wait | Select-String -Quiet 'spawned'
if (System.Boolean -eq True) {
Invoke-Item result2.bat
Read-Host -Prompt "Press Enter to continue"
}
else {
}
}
}
我首先从它的位置复制 .log 文件并将其更改为 .txt。 然后我搜索字符串(“§6§lP§e§lrof”和“spawned”) 最后我试着让它重新做一遍,但这似乎不像搜索那样有效。
有什么帮助吗? 提前感谢
编辑:
非常感谢您的全面回复,这确实帮助我掌握了一些 Powershell 概念,并且运行良好。第二个脚本有点矫枉过正,实际上我遇到了完全相反的问题:添加的线条非常缓慢。在一个完美的世界中,我希望脚本在找到一个结果后继续运行,而不是在找到每个结果后继续重置它。关于日志文件还有另一条非常有趣的规则:带有我所追求的字符串的行永远不会一个接一个地出现,至少在它们之间总是有一个。这意味着如果脚本连续两次找到相同的字符串,它只是同一行,我不希望我的批处理脚本停止。我现在正在使用的 PowerShell 脚本(这是您向我展示的代码,对其进行了微小的更改以使其循环)在最后,它只使用了一个小问题:如果我将计算机用于其他 Powershell当它找到结果时变成顶部的窗口,我不希望这种情况发生,你能帮我做最后一件事吗?非常感谢您!
while ($True) {
Write-Output 'Enter <ctrl><c> to break out of this loop.'
Start-Sleep -Seconds 1
$LastLogLine = Get-Content -Path "C:\LocationOfFile\latest.log" -tail 1
if ($LastLogLine -ne $LastLine) {
if ($LastLogLine -like '*§6§lP§e§lrof*') {
Start-Process -FilePath "result1.bat" -WindowStyle Minimized
$LastLine = $LastLogLine
} elseif ($LastLogLine -like '*spawned*') {
Start-Process -FilePath "result2.bat" -WindowStyle Minimized
$LastLine = $LastLogLine
}
}
}
【问题讨论】:
标签: powershell