寻找一个 powershell 脚本,它在目录中获取最新的 txt 文件并搜索关键字 "RequriedString"
Looking for a powershell script that takes latest txt file in directory and searches for keyword "RequriedString"
$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'
}
我试过这段代码,目前效果很好。但是想要确保即使在给定的同一时间有两个最新的文本文件,代码也能正常工作。
文件系统时间戳,至少如通过 .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-Object
输出的对象的 .Group
属性)。
Select-String
通过管道接受(多个)文件系统信息对象,并默认执行给定正则表达式与文件内容的不区分大小写的匹配。
$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'
}
我试过这段代码,目前效果很好。但是想要确保即使在给定的同一时间有两个最新的文本文件,代码也能正常工作。
文件系统时间戳,至少如通过 .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-Object
输出的对象的.Group
属性)。Select-String
通过管道接受(多个)文件系统信息对象,并默认执行给定正则表达式与文件内容的不区分大小写的匹配。