Cómo utilizar PowerShell para monitorizar los archivos de texto y activar alertas para profesionales de TI

En el panorama informático actual, la automatización es clave para gestionar y supervisar eficazmente los sistemas. PowerShell, con sus potentes funciones de scripting, es una herramienta imprescindible para los profesionales de TI y los proveedores de servicios gestionados (MSP) que desean agilizar sus flujos de trabajo. Una tarea habitual es la monitorización de archivos de texto en busca de contenido específico, ya sea para rastrear registros, detectar errores o alertar sobre información crítica.

El script de PowerShell que vamos a explorar hoy sirve precisamente para esto: avisa cuando se encuentra un texto especificado en un archivo de texto, lo que lo convierte en una herramienta inestimable para los responsables de mantener el buen estado y la seguridad de los sistemas informáticos.

Contexto

Los archivos de texto se utilizan a menudo en entornos informáticos para registrar actividades, almacenar datos de configuración o guardar información crítica. Monitorizar los archivos de texto en busca de palabras clave o frases específicas es crucial por varias razones, como detectar brechas de seguridad, garantizar el cumplimiento o identificar fallos del sistema.

Tradicionalmente, los profesionales de TI podían inspeccionar manualmente estos archivos o utilizar complejas soluciones de software para supervisarlos. Sin embargo, con PowerShell, puedes automatizar este proceso con un script sencillo pero eficaz. Este script es especialmente beneficioso para los MSP que gestionan varios clientes y necesitan una forma fiable de monitorizar los archivos de texto en distintos entornos.

El script para monitorizar los archivos de texto

#Requires -Version 4

<#
.SYNOPSIS
    Alert when the specified text is found in a text file.
.DESCRIPTION
    Alert when the specified text is found in a text file.
.EXAMPLE
    (No Parameters)
    ## EXAMPLE OUTPUT WITHOUT PARAMS ##

PARAMETER: -Path "C:\ReplaceMe\WithPath\To\Text.txt"
    File path to the text file you would like to monitor.

PARAMETER: -TextToMatch "ReplaceMeWithTextToFind"
   Text to alert on when found.

.EXAMPLE
    -Path "C:\Test-FileMonitor.txt" -TextToMatch "bat"
    
    [Alert] Found Text!

.EXAMPLE
    -Path "C:\Test-FileMonitor.txt" -TextToMatch "man" -MatchOnlyOnWholeWord
    
    Text Not Found!

PARAMETER: -MatchOnlyOnWholeWord
    Alert only when your given 'Text To Match' is not contained in another word.

PARAMETER: -CaseSensitive
    Alert only when the casing of your specified 'Text To Match' is identical; for example, alert on 'BAT' but not 'bat'.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2012
    Release Notes: Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://ninjastage2.wpengine.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]$Path,
    [Parameter()]
    [String]$TextToMatch,
    [Parameter()]
    [Switch]$WholeWordOnly = [System.Convert]::ToBoolean($env:matchOnlyOnWholeWord),
    [Parameter()]
    [Switch]$CaseSensitive = [System.Convert]::ToBoolean($env:caseSensitive)
)

begin {
    # Set Dynamic Script Variables
    if($env:textToMatch -and $env:textToMatch -notlike "null"){
        $TextToMatch = $env:textToMatch
    }
    if($env:textFilePath -and $env:textFilePath -notlike "null"){
        $Path = $env:textFilePath
    }

    # Check for local administrator rights.
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    # Check that a path was given and if not error out.
    if (-not $Path) {
        Write-Host "[Error] A filepath is required!"
        exit 1
    }

    # If not given text to match error out.
    if (-not $TextToMatch){
        Write-Host "[Error] Text to match is required!"
        exit 1
    }

    # Error out if script is running without local administrator rights.
    if (-not (Test-IsElevated)) {
        Write-Host "[Error] Access Denied. Please run with Administrator privileges."
        exit 1
    }

    # Check that the path given exists.
    if (-not (Test-Path -Path $Path)) {
        Write-Host "[Error] File does not exist!"
        exit 1
    }

    # Check that we're given a file and not a folder.
    $File = Get-Item -Path $Path
    if ($File.PSIsContainer) {
        Write-Host "[Error] Please provide a file path, not a directory."
        exit 1
    }

    $ExitCode = 0
}
process {
    # Check if we were given a binary file and if so error out.
    $ByteCount = 1024
    $ByteArray = Get-Content -Path $Path -Encoding Byte -TotalCount $ByteCount
    if ($ByteArray -contains 0 ) {
        Write-Host "[Error] This script does not support searching binary files!"
        exit 1
    }

    # Retrieve file contents.
    $File = Get-Content -Path $Path

    # If file is empty error out.
    if (-not $File) {
        Write-Host "[Error] reading file, file is either empty or you do not have permission to read it."
        exit 1
    }

    # Scan through each-line checking for our text.
    $File | ForEach-Object {
        # Based on the parameters given match the text.  
        if (-not $CaseSensitive -and -not $WholeWordOnly -and $_ -like "*$TextToMatch*") {
            $Match = $True
        }

        if ($CaseSensitive -and -not $WholeWordOnly -and $_ -clike "*$TextToMatch*") {
            $Match = $True
        }

        if ($WholeWordOnly -and -not $CaseSensitive -and $_ -match "\b$TextToMatch\b") {
            $Match = $True
        }

        if ($WholeWordOnly -and $CaseSensitive -and $_ -cmatch "\b$TextToMatch\b") {
            $Match = $True
        }
    }

    # If our text matched alert.
    if ($Match) {
        Write-Host "[Alert] Found Text!"
    }
    else {
        Write-Host "Text Not Found!"
    }

    exit $ExitCode
}
end {
    
    
    
}

 

Análisis detallado

El script proporcionado está diseñado para monitorizar los archivos de texto en busca de contenido específico y alertar al usuario cuando se encuentra el texto. Aquí tienes un desglose paso a paso de cómo funciona el script:

1.  Configuración de parámetros:

  • El script para monitorizar los archivos de texto comienza definiendo parámetros como -Path (la ruta de acceso al archivo de texto que quieres supervisar) y -TextToMatch (el texto que quieres encontrar). Los parámetros opcionales incluyen -WholeWordOnly para garantizar que el texto se compara sólo cuando aparece como una palabra completa, y -CaseSensitive para diferenciar entre mayúsculas y minúsculas.

2.  Variables del entorno:

  • El script comprueba si las variables de entorno están configuradas para textToMatch y textFilePath. Si lo están, estos valores anulan los parámetros proporcionados por el usuario.

3.  Validación de privilegios y rutas:

  • El script para monitorizar los archivos de texto incluye una función para comprobar si se está ejecutando con privilegios administrativos, necesarios para acceder a determinados archivos o rutas del sistema. También verifica que la ruta proporcionada existe y apunta a un archivo válido en lugar de a un directorio.

4.  Recuperación de contenidos de archivos:

  • El script lee el contenido del archivo especificado. Si el archivo está vacío o el usuario carece de permiso para leerlo, el script fallará, impidiendo la ejecución posterior.

5.  Lógica de concordancia de textos:

  • El script para monitorizar los archivos de texto recorre cada línea del archivo, aplicando los criterios de coincidencia de texto especificados. Comprueba si las opciones -CaseSensitive o -WholeWordOnly están activadas y ajusta la lógica de coincidencia en consecuencia. Si se encuentra el texto, el script avisa al usuario imprimiendo [Alerta] ¡Texto encontrado!; en caso contrario, imprime ¡Texto no encontrado!

6.Tratamiento de errores:

  • A lo largo de su ejecución, el script para monitorizar los archivos de texto incluye una sólida gestión de errores para garantizar que se cierra correctamente con los mensajes de error adecuados si surge algún problema, como la falta de parámetros, de privilegios o de rutas de archivos no válidas.

Este script ofrece una forma potente y sencilla de supervisar archivos de texto, lo que lo convierte en una herramienta esencial para los profesionales de TI.

Posibles casos de uso

Imagínate a un profesional de TI responsable de supervisar los registros de seguridad de varios servidores. Tiene que detectar mensajes de error específicos o intentos de acceso no autorizados en cuanto se producen.

Al desplegar este script, puede automatizar el proceso de escaneo de estos archivos de registro en busca de palabras clave críticas, como “acceso no autorizado” o “error 503”. Cada vez que se encuentran estas palabras clave, el script alerta inmediatamente, lo que permite una respuesta rápida ante posibles amenazas a la seguridad. Este enfoque proactivo mejora la postura de seguridad de la organización y reduce el riesgo de pasar por alto problemas críticos.

Comparaciones

En comparación con otros métodos, como el uso de software de gestión de registros de terceros o la inspección manual de registros, este script de PowerShell ofrece una solución ligera y personalizable. Aunque las herramientas de terceros pueden ofrecer más funciones, a menudo tienen un coste y requieren una configuración adicional.

Por otro lado, la inspección manual requiere mucho tiempo y es propensa a errores humanos. Este script logra un equilibrio al proporcionar una solución automatizada y rentable que se integra perfectamente en los flujos de trabajo existentes.

FAQ

1. ¿Se puede utilizar este script para monitorizar varios archivos simultáneamente?

El script está diseñado para monitorizar los archivos de texto uno a uno. Sin embargo, puedes modificar el script o ejecutarlo en paralelo para varios archivos.

2. ¿Qué ocurre si el archivo que se está monitorizando se actualiza después de que el script comience a ejecutarse?

El script lee el contenido del archivo en el momento de la ejecución. Si el archivo se actualiza después de iniciarse el script, esos cambios no se detectarán a menos que se vuelva a ejecutar el script.

3.  ¿Es posible registrar las alertas en un archivo en lugar de mostrarlas en la consola?

Sí, puedes modificar el script para que registre las alertas en un archivo sustituyendo Write-Host por Add-Content o Out-File.

Implicaciones

El uso de este script para monitorizar los archivos de textos críticos puede tener implicaciones significativas para la seguridad informática. Al automatizar la detección de frases clave o mensajes de error, los profesionales de TI pueden responder más rápidamente a posibles problemas, reduciendo el tiempo de inactividad y mitigando los riesgos de seguridad.

Sin embargo, es importante recordar que este script opera dentro de los confines del archivo de texto especificado y sólo es tan eficaz como las palabras clave que está configurado para supervisar. Si se utiliza correctamente, puede ser una herramienta poderosa en la estrategia más amplia de supervisión de TI y respuesta a incidentes.

Recomendaciones

Cuando utilices este script para monitorizar los archivos de texto, es importante que sigas estas prácticas:

  • Haz pruebas en un entorno controlado: antes de desplegar el script en un entorno de producción, pruébalo en un entorno controlado para asegurarte de que se comporta como se espera.
  • Actualiza regularmente las palabras clave: revisa y actualiza las palabras clave que monitorizas para asegurarte de que se ajustan a la evolución de las amenazas y los requisitos operativos.
  • Intégralo con otras herramientas: considera la posibilidad de integrar el script con otras herramientas de supervisión o sistemas de alerta para crear una solución de supervisión más completa.

Reflexiones finales

Para los profesionales de TI, especialmente los que gestionan múltiples entornos, la automatización es crucial. Este script de PowerShell para monitorizar los archivos de texto ofrece una forma sencilla pero eficaz de supervisar archivos de texto en busca de información crítica, lo que permite responder rápidamente a posibles problemas.

Si bien este script es una herramienta poderosa por sí sola, vale la pena señalar que las soluciones integrales de gestión de TI como NinjaOne pueden mejorar aún más tu capacidad para monitorizar, administrar y proteger sus sistemas. Combinando scripts como este para monitorizar los archivos de texto con una plataforma de gestión de TI más amplia, puedes garantizar que la infraestructura de TI de tu organización siga siendo sólida y resistente.

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón “Acepto” que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona “tal cual” y “según disponibilidad”, sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).