用于检查文本模式的Powershell脚本忽略历史记录日志

时间:2017-11-06 15:21:35

标签: windows powershell powershell-v2.0 windows-server-2012

我正在编写一个PowerShell脚本,它将检查记事本中的文本“错误”,并在模式条件满足时启动。我编写了脚本来执行此操作,但挑战是让脚本忽略已经读过的内容。

假设我有一个记事本保存的log.txt,下面的脚本会检查模式文本“有错误”并将启动wordpad。我希望脚本忽略已读取的模式。只扫描新的。

if(Select-String -path "C:\Users\dddd\Desktop\error.txt" -pattern "There is a error"){Start-Process wordpad.exe}

1 个答案:

答案 0 :(得分:-1)

我会在几个步骤中解决这个问题。首先,我需要一种方法来在阅读文件时跟踪我的进度。在这种情况下,我将使用环境变量,但使用注册表项可能会好一点。为了设置这个变量,我们可以调用.Net" SetEnvironmentVariable"方法:

[Environment]::SetEnvironmentVariable("ErrorLine", "0", "Machine")

这将在" 0"处启动我们的环境变量,我们将使用它来跟踪我们正在扫描的文件的行号。

接下来,我们需要能够读取文件的内容,并将其与您的字符串进行比较。为此,我喜欢使用For循环,结合使用cmdlet来逐行查看文件。

For ($i = $env:ErrorLine, $i -lt ((Get-Content $logPath).Count), $i ++) {
  if ((Get-Content $logPath)[$i] -contains '*error*') {
    do something
  }
  $env:ErrorLine += 1
}

当然,您必须进行一些故障排除,并且您可能希望将此全部包装在try {} catch {}块中以进一步处理错误,但这应该让您开始。