我正在编写一个PowerShell脚本,它将检查记事本中的文本“错误”,并在模式条件满足时启动。我编写了脚本来执行此操作,但挑战是让脚本忽略已经读过的内容。
假设我有一个记事本保存的log.txt,下面的脚本会检查模式文本“有错误”并将启动wordpad。我希望脚本忽略已读取的模式。只扫描新的。
if(Select-String -path "C:\Users\dddd\Desktop\error.txt" -pattern "There is a error"){Start-Process wordpad.exe}
答案 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 {}块中以进一步处理错误,但这应该让您开始。