实现 Unix Tail 命令的 Windows PowerShell 命令

Migel Hewage Nimesha 2023年12月11日
  1. Win 32 中的 tail 实现 tail Unix 命令功能
  2. Windows PowerShell 配合 Get-Content 实现 tail Unix 命令功能
  3. Windows PowerShell 配合 Cat 实现 tail Unix 命令功能
实现 Unix Tail 命令的 Windows PowerShell 命令

Unix 操作系统包含操作系统命令 tailtail 程序的目的是显示文本文件/管道数据的尾部。

预期的输出是文件的最后几行。行数可以变化。同一命令可以同时用于多个文件以打印标准输出。

除了 Unix,tail 命令还支持类 Unix 系统和 FreeDOS 和 MSX-DOS 系统。

在 Windows PowerShell(跨平台应用程序的 Windows 版本)中,可以执行命令行 shell 命令以实现不同功能的自动化。然而,这里使用的命令不同于类 Unix 系统中使用的标准脚本命令。

在 Windows PowerShell 中执行 tail 类似功能有几种可接受的方法。

Win 32 中的 tail 实现 tail Unix 命令功能

实现此功能的常用方法之一是使用 Windows PowerShell 的 tail-f 程序; Win32 的尾部。它跟踪任何文件更改并允许用户实时跟踪更改。但是,它要求用户完全使用另一个程序,可通过以下链接获得:https://tailforwin32.sourceforge.net。因此,对于正在为 Windows 系统搜索特定于 PowerShell 的替代方案的用户来说,它不是一个合适的解决方案。

但是,也有一些可接受的基于 PowerShell 的解决方案。

Windows PowerShell 配合 Get-Content 实现 tail Unix 命令功能

一种最有效的方法是使用 Get-Content。它后面是 -Tail n,n 是你需要作为输出获得的行数。

在早期版本的 Windows Power shell V1 和 V2 中,此功能是通过 Get-Content 命令和 -Wait 命令实现的。如果文件实时更改,则使用 Wait 命令以便跟踪任何更改。

Get-Content .\DummyLogFile.txt

这里的输出将获得整个文件的内容,如下所示。它从日志文件的第一行开始,一直持续到最后。

2021-12-31 14:49:47, Info                  CBS    TI: --- Initializing Trusted Installer ---
2021-12-31 14:49:47, Info                  CBS    TI: Last boot time: 2021-12-31 12:41:44.516
2021-12-31 14:49:47, Info                  CBS    Startup processing thread terminated normally
2021-12-31 14:49:47, Info                  CBS    TI: Startup Processing completes, release startup processing lock.
.
.

然而,当与 - Wait 一起使用时,可以跟踪文件尾部的实时更改。

Get-Content .\DummyLogFile.txt -Wait

在这里,输出将包含所有文件数据并等待下面的更改。

2021-12-31 14:49:47, Info                  CBS    TI: --- Initializing Trusted Installer ---
2021-12-31 14:49:47, Info                  CBS    TI: Last boot time: 2021-12-31 12:41:44.516
2021-12-31 14:49:47, Info                  CBS    Startup processing thread terminated normally
2021-12-31 14:49:47, Info                  CBS    TI: Startup Processing completes, release startup processing lock.
_

后来在 PowerShell V2 之后的版本中,V3 支持 -Tail 关键字。因此,你只能预览所需的最后几行,而不是获取整个文件。

 Get-Content .\DummyLogFile.txt -Tail 4

给出的输出是给定文本的最后四行。4 是 n 的一个变量值,在 tail 命令之后包括下面的尾行数。

C:\Users>  Get-Content .\DummyLogFile.txt -Tail 4
2022-01-06 08:58:10, Info                  CBS    Ending the TrustedInstaller main loop.
2022-01-06 08:58:10, Info                  CBS    Starting TrustedInstaller finalization.
2022-01-06 08:58:10, Info                  CBS    Lock: Lock removed: WinlogonNotifyLock, level: 8, total lock:6
2022-01-06 08:58:10, Info                  CBS    Ending TrustedInstaller finalization.
PS C:\Users>

当用户需要实时数据时,例如日志文件、不断变化的文件,可以添加 -Wait 命令。添加新的最后一行时,输出会更新以打印任何新行。

PS C:\Users> Get-Content .\DummyLogFile.txt -Wait -Tail 4

输出将等待更改。

Get-Content .\DummyLogFile.txt -Wait -Tail 4
2022-01-06 08:58:10, Info                  CBS    Ending the TrustedInstaller main loop.
2022-01-06 08:58:10, Info                  CBS    Starting TrustedInstaller finalization.
2022-01-06 08:58:10, Info                  CBS    Lock: Lock removed: WinlogonNotifyLock, level: 8, total lock:6
2022-01-06 08:58:10, Info                  CBS    Ending TrustedInstaller finalization.

但是,当你使用具有较大尾部值的 -wait 时,你会让系统在一个不断变化的文件中等待,例如日志文件。这会导致发生大量内存消耗。因此,重要的是要注意一起使用 -wait -tail 命令的文件类型。

Windows PowerShell 配合 Cat 实现 tail Unix 命令功能

对于更熟悉类 Unix 系统的用户来说,使用 cat 命令会很方便。

PS C:\Users> cat .\DummyLogFile.txt

仅使用 cat 命令将输出或打印文本文件的内容,仅类似于 Get-Content

2021-12-31 14:49:47, Info                  CBS    TI: --- Initializing Trusted Installer ---
2021-12-31 14:49:47, Info                  CBS    TI: Last boot time: 2021-12-31 12:41:44.516
2021-12-31 14:49:47, Info                  CBS    Startup processing thread terminated normally
2021-12-31 14:49:47, Info                  CBS    TI: Startup Processing completes, release startup processing lock.
 ...

但是,使用 cat-Tail n 命令(n 是输出中所需的最后行数)将提供与 Unix 中的 tail 命令类似的输出。

PS C:\Users> cat .\DummyLogFile.txt -Tail 4

代码的输出如下。

C:\Users>  cat .\DummyLogFile.txt -Tail 4
2022-01-06 08:58:10, Info                  CBS    Ending the TrustedInstaller main loop.
2022-01-06 08:58:10, Info                  CBS    Starting TrustedInstaller finalization.
2022-01-06 08:58:10, Info                  CBS    Lock: Lock removed: WinlogonNotifyLock, level: 8, total lock:6
2022-01-06 08:58:10, Info                  CBS    Ending TrustedInstaller finalization.
PS C:\Users>

需要时,cat 命令也可以与 Wait 命令一起使用,以跟踪对文本文件的实时更改,例如系统中的日志文件。

PS C:\Users> cat .\DummyLogFile.txt -Tail 4 -Wait

因此,将给出输出,并且系统等待给定文件中的任何更改。然后这些更改的文件尾行将由 PowerShell 打印为输出。

Get-Content .\DummyLogFile.txt -Wait -Tail 4
2022-01-06 08:58:10, Info                  CBS    Ending the TrustedInstaller main loop.
2022-01-06 08:58:10, Info                  CBS    Starting TrustedInstaller finalization.
2022-01-06 08:58:10, Info                  CBS    Lock: Lock removed: WinlogonNotifyLock, level: 8, total lock:6
2022-01-06 08:58:10, Info                  CBS    Ending TrustedInstaller finalization.
_

Linux tail 最常用于跟踪 Linux 和类 Linux 系统中的不同日志文件。因此,使 Windows 用户能够运行命令行脚本来实现某些类似功能的 PowerShell 需要具备这样的功能。

在较新的 PowerShell 版本中,tail 命令与上述 Get-Contentcat 命令一起使用,wait 命令用于跟踪任何实时更改。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.