PowerShell如何仅读取.log文件最后两行以获取正确运行状态?
仅读取日志最后2行的脚本修正方案
核心修改项
- 用
Get-Content -Tail 2定向读取日志末尾2行,替代全文件扫描,从根源避免历史行关键词干扰 - 修复原脚本的3个缺陷:
- 函数内误用
$_而非传入的$file路径参数 - 调用函数行末尾多余的
]语法错误 - 正则匹配时未转义
.,导致Finished.会误匹配任意后缀字符的问题
- 函数内误用
完整可运行脚本
function Get-Status($file) { # 仅读取最后2行,加容错处理避免空文件/无权限异常 $tailLines = Get-Content -Path $file -Tail 2 -ErrorAction SilentlyContinue if ($tailLines | Select-String -Quiet 'Finished with errors') { return "ERROR" } elseif ($tailLines | Select-String -Quiet 'Finished with warnings') { return "WARNING" } elseif ($tailLines | Select-String -Quiet 'Finished\.') { return "SUCCESS" } else { return "FAILED" } } Get-ChildItem C:\logfolder\*.log | ForEach-Object { [PSCustomObject] @{ Name = $_.Name Date = $_.LastWriteTime Status = Get-Status -file $_.FullName } }
兼容性说明:如果是PowerShell 3.0之前的老旧版本(无
-Tail参数),可以改用Get-Content $file | Select-Object -Last 2替代,性能略低但功能一致
内容的提问来源于stack exchange,提问作者djohnjohn
相关产品推荐
相关产品推荐

