Comandos de Windows PowerShell para lograr el comando Tail de Unix

Migel Hewage Nimesha 11 diciembre 2023
  1. tail en Win 32 para lograr la función de comando Unix tail
  2. Windows PowerShell con Get-Content para lograr la función de comando Unix tail
  3. Windows PowerShell con Cat para lograr la función de comando Unix tail
Comandos de Windows PowerShell para lograr el comando Tail de Unix

El sistema operativo Unix contiene el comando del sistema operativo tail. El propósito del programa tail es mostrar el final de un archivo de texto/datos canalizados.

El resultado esperado son las últimas líneas de un archivo. Se puede variar el número de líneas. El mismo comando se puede usar con más de un archivo a la vez para imprimir la salida estándar.

Además de Unix, el comando tail admite sistemas tipo Unix y sistemas FreeDOS y MSX-DOS.

En Windows PowerShell, la versión de Windows de una aplicación multiplataforma, se pueden ejecutar comandos de shell de línea de comandos para lograr la automatización en diferentes funcionalidades. Sin embargo, los comandos usados ​​aquí varían de los comandos estándar de secuencias de comandos usados ​​en sistemas similares a Unix.

Hay varias formas aceptables de hacer una función similar a tail en Windows PowerShell.

tail en Win 32 para lograr la función de comando Unix tail

Una de las formas comunes de lograr esta funcionalidad sería utilizando el programa tail-f para Windows PowerShell; Cola para Win32. Realiza un seguimiento de cualquier cambio de archivo y permite al usuario realizar un seguimiento de los cambios en tiempo real. Sin embargo, requiere que los usuarios usen otro programa completamente, disponible a través del enlace: https://tailforwin32.sourceforge.net. Por lo tanto, no es una solución adecuada para un usuario que busca una alternativa específica de PowerShell para el sistema Windows.

Sin embargo, también existen algunas soluciones aceptables basadas en PowerShell para esto.

Windows PowerShell con Get-Content para lograr la función de comando Unix tail

Una de las más efectivas es usar Get-Content. Debe seguirse con -Tail n, siendo n el número de líneas que necesita obtener como salida.

En las versiones anteriores de Windows Power shell, V1 y V2, esta funcionalidad se lograba mediante el comando Get-Content seguido del comando -Wait. Si el archivo está cambiando en tiempo real, se usa el comando Wait para que se pueda rastrear cualquier cambio.

Get-Content .\DummyLogFile.txt

Aquí la salida obtendría el contenido de todo el archivo como se muestra a continuación. Comienza desde las primeras líneas del archivo de registro y continúa hasta el final.

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.
.
.

Sin embargo, los cambios en tiempo real en la cola del archivo se pueden rastrear cuando se usa con - Wait.

Get-Content .\DummyLogFile.txt -Wait

Aquí, la salida tendría todos los datos del archivo y esperaría los cambios a continuación.

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.
_

Más tarde, en las versiones posteriores a la V2 de PowerShell, la V3 admite la palabra clave -Tail. Por lo tanto, puede obtener una vista previa solo de las últimas líneas requeridas en lugar de obtener el archivo completo.

 Get-Content .\DummyLogFile.txt -Tail 4

El resultado dado son las últimas cuatro líneas del texto dado. 4 es un valor variable de n, siguiendo el comando tail para incluir el número de líneas de cola a continuación.

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>

Cuando el usuario requiere datos en tiempo real, como en un archivo de registro, un archivo en constante cambio, es posible agregar el comando -Wait. Cuando se agregan nuevas últimas líneas, la salida se actualiza para imprimir cualquier línea nueva.

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

La salida esperaría cambios.

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.

Sin embargo, cuando usa -wait con un valor de cola mayor, deja que el sistema espere en un archivo que cambia constantemente, como un archivo de registro. Da como resultado que se produzca un gran consumo de memoria. Por lo tanto, es importante tener en cuenta el tipo de archivo que utiliza junto con los comandos -wait -tail.

Windows PowerShell con Cat para lograr la función de comando Unix tail

Sería conveniente para los usuarios que están más familiarizados con los sistemas tipo Unix utilizar el comando cat.

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

El uso del comando cat solo generaría o imprimiría el contenido del archivo de texto, similar a Get-Content solamente.

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.
 ...

Sin embargo, usar cat con el comando -Tail n (siendo n el número de líneas finales requeridas en la salida) proporcionaría una salida similar al comando tail en Unix.

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

La salida del código sería la siguiente.

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>

Cuando sea necesario, el comando cat también se puede usar con el comando Wait para rastrear los cambios en tiempo real en los archivos de texto, como archivos de registro en un sistema.

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

Por lo tanto, se daría la salida y el sistema espera cualquier cambio en el archivo o archivos dados. Luego, PowerShell imprimiría esas líneas de colas de archivo modificadas como salida.

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 se usa con mayor frecuencia para rastrear diferentes archivos de registro en Linux y sistemas similares a Linux. Por lo tanto, se requiere que PowerShell, que permite a los usuarios de Windows ejecutar scripts de línea de comandos para lograr ciertas funciones similares, tenga dicha funcionalidad.

En las versiones más recientes de PowerShell, el comando tail se usa junto con los comandos Get-Content o cat descritos anteriormente, y el comando wait se usa para rastrear cualquier cambio en tiempo real.

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.