powershell - 如何从目录中读取所有 .log 文件
问题描述
我正在运行在目录 c:mydir 中生成 .log 文件的 .bat 脚本,我想读取所有 .log 文件以监视我的脚本。
.log 文件的内容非常基本,如果脚本运行以失败告终,在 .log 文件中我有一个字符串:'Finished with errors'(fileA.log 和 fileB.log)。如果运行成功:完成且没有错误(fileC.log)
目标是让 POWERSHELL 脚本返回文件名 + 状态:
- 文件 A.log 失败
- 文件 B.log 失败
- 文件C.log 成功
解决方案
这是一个基于单个管道的简洁的 PowerShell 惯用解决方案,它结合了Get-ChildItem
、ForEach-Object
和Select-String
:
Get-ChildItem *.log | ForEach-Object {
[pscustomobject] @{
Name = $_.Name
Status =
('FAILED', 'SUCCESS')[(Select-String -Quiet 'Finished with NO errors' $_.FullName)]
}
}
这会输出对象,即[pscustomobject]
实例,每个日志文件一个,每个都有一个.Name
和一个.Status
属性;在控制台中,您应该会看到如下输出:
Name Status
---- ------
fileA.log FAILED
fileB.log FAILED
fileC.log SUCCESS
性能优化:
如果您的日志文件很大,mclayton明智地建议使用Get-Content -Tail 1
( Get-Content -Last 1
) 作为优化,假设成功标记字符串始终位于最后一行:
Get-ChildItem *.log | ForEach-Object {
[pscustomobject] @{
Name = $_.Name
Status =
('FAILED', 'SUCCESS')[(Get-Content $_.FullName -Tail 1) -match 'Finished with NO errors']
}
}
推荐阅读
- html - 从 darak.pk 抓取网页给出错误 AttributeError: 'NoneType' 对象没有属性 'find_all'
- uwp - Azure DevOps Server 2019 中的无法下载安全文件错误
- autodesk-forge - 使用 Autodesk Forge Viewer API 查看转换为 SVF 文件的 DWG 文件时出现问题
- amazon-web-services - 跨账户访问 AWS 资源
- python - 选择名称以某些字母开头的所有python变量?
- load-balancing - 禁用内部负载平衡器的 Docker Swarm 中的滚动更新?
- angular - 从 api 读取的 Angular Wrapper 方法
- c++ - 为什么 std::allocator 不能轻易复制?
- android - 带参数的 Gradle 任务
- python - 在嵌套循环中附加数据框