使用powershell解析关键字的logfile,并在find上执行命令

时间:2013-06-28 10:34:16

标签: powershell

脚本需要解析文件夹中的最新日志文件,查找关键字字符串,如果发现它应该执行命令来运行我的tshark +发送电子邮件。

第二次运行时,它应该忽略最后一次查找并查找下一次出现(if,any)。

1 个答案:

答案 0 :(得分:0)

这应该有效:

$logfile = "..."
Get-Content $logfile | ? { $_ -match "keyword" } | % {
  command
  break
}

要忽略之前运行的匹配,您需要存储当前匹配的一些表示标准(例如时间戳)并将其包含在您的过滤器中。但是,如果不知道你的日志文件是什么样的话,就无法帮助你。

编辑:如果每行中都有时间戳,则可以将上次运行的时间戳存储在文件中,并将其用于比较。

$logfile  = "..."
$lastfile = "C:\path\to\lastmatch.txt"

if (Test-Path -LiteralPath ) {
  $last = Get-Date (Get-Content $lastfile)
} else {
  $last = Get-Date "1970-01-01 00:00:00"  # reference date
}

$pattern = '^l(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2]).*keyword'
Get-Content $logfile | ? {
  $_ -match $pattern -and (Get-Date $matches[1]) -gt $last
} | select -Last 1 | % {
  command
  $matches[1] | Out-File $lastfile  # remember date of last match
}