我需要创建一个系统来实时监控日志,并在IP是外国时发送警报。
我更愿意使用powershell(v2,由于服务器重新调整)来实现这一目标,因为我已经有一个系统可以处理前一天的日志,并且我可以重用很多功能。
我可以成功拖尾文件(使用tail.exe)并选择重要的行,但我似乎无法捕获每一行并处理它。
我所拥有的基本要点是:
tail.exe -f \\server\file.log | where-object {$_ -match "criteria"}
当我尝试将结果传递给foreach时,我什么都没得到。
有什么建议吗?
答案 0 :(得分:2)
只要它正在运行,tail命令就会阻塞管道。一种选择是在后台作业中运行尾部,并在无限循环中处理主脚本中的结果:
$Job = Start-Job -ScriptBlock { tail.exe -f \\server\file.log }
While ($true){
Recieve-Job $Job |
Where-Object { $_ -match "criteria" }
Start-Sleep -Seconds 10
}
答案 1 :(得分:0)
如果您必须使用“tail.exe”,请使用“&”使行一起执行,就像在命令提示符中一样。然后用“n”(新行)分割输出。之后,您可以找到与您要查找的内容相匹配的行,并将它们写入控制台或将其写入另一个日志文件。
$log = "\\server\file.log"
$tail = & tail.exe -f $log | ?{$_ -split "`n"}
Foreach($line in $tail)
{
if($line -match "this")
{
Write-Host $line
Out-File -InputObject $line -FilePath \\server\important-logs.log
}
}
答案 2 :(得分:-1)
只需使用Get-Content PowerShell Cmndlet,它就会返回一个System.Array对象。
$Content = Get-Content "Path to log.log" | ? { $_ -match "something" }