解析多个服务器以查找子目录中包含特定文本的最新修改文件

解析多个服务器以查找子目录中包含特定文本的最新修改文件

我有多个服务器,每个服务器都有一个特定的文件夹名称,其中有多个子目录。我想查看该子目录中的最新文件(每个子目录都有一个最新的带时间戳的日志文件)。我想解析每个子目录中找到的最新文件的内容,并查找我指定的关键字,如果找到,则将文件夹名称/子目录名称/与条件匹配的行输出到 excel 文件或文本文件中的特定行。

例如:Server1

  • 日志文件夹 1
    • 文本文件 1(最新时间戳)
    • 文本文件 2(昨天的时间戳)
    • 文本文件 3(前天时间戳)...等等..
  • 日志文件夹 2
    • 文本文件 1(最新时间戳)
    • 文本文件 2(昨天的时间戳)
    • 文本文件 3(前天时间戳)...等等..

我在每个文件夹的文本文件中寻找具有最新时间戳的失败或成功的关键字,如果失败或日志丢失,则输出到文本文件或 CSV 文件。

尝试过使用 Findstr 和 Dir 的日期属性,但无法获得我想要的结果。我仍在尝试互联网上的各种建议,但目前还没有一个能让我实现我计划实现的目标。可以使用 Powershell 或 Windows 批处理命令来完成,但我的想法已经用尽,而且我的截止日期也快到了,因此迫切需要寻求帮助。我的另一种方法是手动打开每个文件夹,按日期排序,打开每个文件并手动记录。我有大约 800 个这样的文件夹需要手动浏览。不过我已经开始手动操作了。任何帮助都将不胜感激。

答案1

您好,下面的代码应该可以满足您的需求,请根据自己的需求进行调整。使用我的用户配置文件临时文件进行搜索。

$searchRoot = Get-ChildItem -Directory -Path "C:\Users\Valgrind\AppData\Local\Temp" -ErrorAction Ignore
foreach ($item in $searchRoot)
{
    $subcontent = Get-ChildItem -File -Path $item.Fullname -Recurse  -ErrorAction Ignore
    
    if ($subcontent.Count -ne 0)
    {
        $latestfile = $subcontent | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty FullName
        $raw = Get-Content -Path $latestfile -Raw

        if ($raw -like "*success*")
        {
            Write-Output "Success in file: $latestfile"
            Add-Content -Path "$PSScriptRoot\success.log" -Value $latestfile
        }
        else {
            Write-Output "Success not in file: $latestfile"
        }
    }
}

相关内容