Powershell tail 多文件命令

Powershell tail multiple files command

我可以通过以下命令跟踪一个文件:

Get-Content -Path C:\log1.txt -Tail 10 –Wait

如何将其扩展到多个文件,我尝试了以下但没有成功:

Get-Content -Path C:\log1.txt,C:\log2.txt -Tail 10 –Wait

这只会从第一个文件而不是第二个文件中获取更新。

根据@mjolinor 的评论,我想出了以下似乎有效的方法,

Workflow My-Tail
{
    Param([string[]] $Path)

    foreach -parallel ($file in $path)
    {
        Get-Content -Path $file -Tail 1 -Wait
    }
}

My-Tail (dir C:\*.log -Include log1.txt,log2.txt)

但是,这会出现某种进度条...

我需要跨多个文件进行尾部输出,我想尝试在一行中完成,
这是我最终想出的:

gci *.txt -recurse | ForEach-Object  { Write-Output "$_`n" + $(Get-Content $_ -tail 5) + "`n" }

它采用所有名为 *.txt 的文件的递归目录列表,
将文件路径写入控制台,
然后将最后 5 行写入控制台。

我不需要跟踪文件的尾部,它们没有被主动写入。

我不能说这有多高效,但由于我使用的是 PowerShell Core 7.1.3,我不能使用工作流或 ForEach -Parallel,但我可以使用 ForEach-Object -Parallel , 所以我试了一下,看看会发生什么......

gci -Path C:\ -Filter log*.txt |
    % -Parallel {
        cat -Wait -Tail 10 -Path $_
    } -ThrottleLimit 30

在我的例子中,我有 27 个文件需要监控,所以我选择了一个刚好高于这个的数字,这似乎有效。

为了确保它能正常工作,我使用了这个,它会在每一行之前输出源文件名:

gci -Path C:\ -Filter log*.txt |
    % -Parallel {
        $file = $_;
        cat -Wait -Tail 10 -Path $file |
            % { write "$($file.Name): ${_}" }
    } -ThrottleLimit 30