寻找一个在目录中获取最新 txt 文件并搜索关键字“RequriedString”的 powershell 脚本
Posted
技术标签:
【中文标题】寻找一个在目录中获取最新 txt 文件并搜索关键字“RequriedString”的 powershell 脚本【英文标题】:Looking for a powershell script that takes latest txt file in directory and searches for keyword "RequriedString" 【发布时间】:2020-11-11 13:58:19 【问题描述】:$dir = "C:\temp"
$latest = Get-ChildItem -Recurse -Filter filename*.txt -Path $dir | Sort-Object
LastAccessTime -Descending | Select-Object -First 1
$SEL = get-content $latest
if( $SEL -imatch "error" )
Write-Host 'Errors found in the log file'
#send email code to be added
else
Write-Host 'No Errors'
我已经尝试过这段代码,目前它运行良好。但想确保代码在同一给定时间有两个最新的文本文件时也能正常工作。
【问题讨论】:
你有没有试过......什么?很多现有的问题已经在询问如何获取最后修改的文件、搜索文本文件、发送电子邮件等。 请向我们展示您您自己的尝试。 SO 不是一个您可以“订购”脚本的平台,您需要自己努力,解释在那里可以做什么和不可以做什么,以便我们为您提供帮助。 编辑了我的问题,提供了有关 myend 尝试的更多信息 至于这个... [但想确保代码即使在同一给定时间有两个最新的文本文件也能正常工作。],这不是 PowerShell 问题或控件。这就是 Windows 的全部内容。你只选择了第一个,所以,你的关注不应该是一件事。 【参考方案1】:文件系统时间戳,至少通过 .NET 报告,因此通过 PowerShell,使用 System.DateTime
数据类型,其分辨率为“一百纳秒或一千万分之一秒”。
我不知道这是否实际上有可能,但至少看起来极不可能两个或更多文件会以完全相同的形式结束相同的时间戳。
如果您不想冒险,可以使用以下方法:
$dir = 'C:\temp'
$latest = Get-ChildItem -Recurse -Filter filename*.txt -LiteralPath $dir |
Group-Object LastWriteTime |
Select-Object -ExpandProperty Group -Last 1
if ($latest | Select-String 'error')
Write-Verbose -Verbose 'Errors found in the log file'
#send email code to be added
else
Write-Verbose -Verbose 'No Errors'
注意:
以上使用LastWriteTime
而不是LastAccessTime
属性,因为大概您对文件上次修改的时间感兴趣。
Group-Object
隐式输出其按分组标准排序的对象。
Select-Object -ExpandProperty Group -Last 1
采用最后一组,表示具有 latest 修改时间戳的文件,并输出包含该组的文件系统信息(通过对象的 .Group
属性由Group-Object
输出)。
Select-String
通过管道接受(多个)文件系统信息对象,默认情况下执行给定正则表达式与文件内容的不区分大小写匹配。
【讨论】:
以上是关于寻找一个在目录中获取最新 txt 文件并搜索关键字“RequriedString”的 powershell 脚本的主要内容,如果未能解决你的问题,请参考以下文章