Powershell:记录日志并处理每一行

时间:2014-01-14 18:29:45

标签: powershell powershell-v2.0 tail

我需要创建一个系统来实时监控日志,并在IP是外国时发送警报。

我更愿意使用powershell(v2,由于服务器重新调整)来实现这一目标,因为我已经有一个系统可以处理前一天的日志,并且我可以重用很多功能。

我可以成功拖尾文件(使用tail.exe)并选择重要的行,但我似乎无法捕获每一行并处理它。

我所拥有的基本要点是:

tail.exe -f \\server\file.log | where-object {$_ -match "criteria"}

当我尝试将结果传递给foreach时,我什么都没得到。

有什么建议吗?

3 个答案:

答案 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" }