我正在尝试创建一个powershell脚本,每次运行该脚本时,只从一个文件中复制与模式(可以是一行或多行)匹配的新条目到另一个文件中。源文件由应用程序随机更新,但请求是每小时复制最后一个条目。
我正在研究的解决方案是将上次运行的最后一个条目存储在文件中,并与文件中的最后一个条目进行比较,如果这些不匹配,则开始复制该条目之后的新行。这是我卡住的部分,我不知道如何表示,而是每次都复制整个内容。
这是我目前得到的:
Write-Host "Declaring the output log file ..... " -ForegroundColor Yellow
$destinationfile = 'C:\file\out\output.log'
Write-Host "Getting the last line of the source file ..... " -ForegroundColor Yellow
$sourcefile = 'C:\app\blade\inputlogs.log'
$sourcefilelastline = Get-Content $originfile | Select-Object -last 1
$sourcefilelastline
Write-Host "Getting the last line of the destination file ..... " -ForegroundColor Yellow
$destinationfilelastline = Get-Content $destinationfile | Select-Object -last 1
$destinationfilelastline
if ($sourcefilelastline -eq $destinationfilelastline){
Write-Host "Skipping the process ..... " -ForegroundColor Yellow
}
else{
Write-Host "Reading the source log file and updating destination file ..... " -ForegroundColor Yellow
$sourcefilecontent = Get-Content -Path $sourcefile | Where-Object { $_ -ne '' } | Select-String -Pattern 'error' -CaseSensitive -SimpleMatch
$sourcefilecontent | Add-Content $destinationfile
}
字符串
有什么办法可以帮我完成吗?谢谢。
2条答案
按热度按时间1bqhqjot1#
Get-content有一个开关“tail”,它可以让你从文件中读取最后一行。按照微软自己的话:
Tail参数获取文件的最后一行。此方法比检索变量中的所有行并使用[-1]索引表示法更快。
你可以在你的情况下使用它,从底线开始,直到它们匹配。
字符串
yizd12fk2#
这是一个小实验,但似乎效果很好。
函数Read-LastLinesOfTextFile:
字符串
要调用这个函数,使用类似于下面的一行,只需要确保将
MyLogReader
替换为您的脚本唯一的名称,这样您就不会与使用相同函数的其他脚本发生冲突。看起来您正在对“error”进行区分大小写的比较,所以我在这个例子中使用了-cmatch
。如果您想要区分大小写,请将其更改为-match
。型