Cómo automatizar las alertas de puntos de control de Hyper-V mediante PowerShell

La gestión eficiente de entornos Hyper-V es una tarea crítica para los profesionales de TI y los proveedores de servicios gestionados (MSP). Uno de los aspectos de esta gestión es el seguimiento de los puntos de control, esenciales para mantener los estados del sistema y garantizar procesos de recuperación fluidos. Este post explorará un script de PowerShell diseñado para automatizar el proceso de supervisión y alerta a los administradores sobre los puntos de control de Hyper-V que superan un determinado umbral de antigüedad.

Comprender la finalidad y la importancia del script

El script PowerShell para automatizar las alertas de puntos de control de Hyper-V es una herramienta valiosa para los administradores de TI que necesitan asegurarse de que sus entornos Hyper-V permanecen limpios y eficientes. Los puntos de control, también conocidos como instantáneas o snapshots, capturan el estado de una máquina virtual en un momento determinado. Aunque son útiles para las copias de seguridad y la recuperación, los puntos de control antiguos pueden consumir mucho espacio de almacenamiento y afectar potencialmente al rendimiento de las máquinas virtuales. Por lo tanto, es crucial supervisar y gestionar regularmente estos puntos de control.

El script para automatizar las alertas de puntos de control de Hyper-V

#Requires -Version 5.1

<#
.SYNOPSIS
    This will get information about the current number of Hyper-V checkpoints there are on a given machine. Can be given a threshold in days to report on, can also get this threshold from an integer custom field.
.DESCRIPTION
    This will get information about the current number of Hyper-V checkpoints there are on a given machine. 
    Can be given a threshold in days to report on, can also get this threshold from an integer custom field.

.EXAMPLE 
    (No Parameters)
    WARNING: There are checkpoints older than 04/12/2023 14:01:26!

    VMName              Name                   CreationTime
    ------              ----                   ------------
    SRV16-TEST          Fresh Start            4/12/2023 10:53:14 AM
    SRV16-TEST          Hyper-V Installed      4/12/2023 11:13:09 AM
    SRV19-TEST          Fresh Start            4/12/2023 10:42:44 AM
    SRV22-TEST          Fresh Start            4/12/2023 10:45:02 AM

PARAMETER: -OlderThan "14"
    Alert/Show only vm checkpoints older than x days. 
    ex. "7" will alert/show vm checkpoints older than 7 days.
.EXAMPLE
    -OlderThan "7"
    WARNING: There are checkpoints older than 04/05/2023 14:04:01!
    
    VMName              Name                                                              CreationTime
    ------              ----                                                              ------------
    old WIN10-TEST      Automatic Checkpoint - WIN10-TEST - (3/30/2023 - 3:02:28 PM)      3/30/2023 3:02:28 PM 

PARAMETER: -FromCustomField "ReplaceMeWithAnyIntegerCustomField"
    Name of an integer custom field that contains your desired OlderThan threshold.
    ex. "CheckpointAgeLimit" where you have entered in your desired age limit in the "CheckPointAgeLimit" custom field rather than in a parameter.
.EXAMPLE
    -FromCustomField "ReplaceMeWithAnyIntegerCustomField"
    WARNING: There are checkpoints older than 04/05/2023 14:04:01!
    
    VMName              Name                                                              CreationTime
    ------              ----                                                              ------------
    old WIN10-TEST      Automatic Checkpoint - WIN10-TEST - (3/30/2023 - 3:02:28 PM)      3/30/2023 3:02:28 PM

.OUTPUTS
    
.NOTES
    Minimum OS Architecture Supported: Windows 10, Server 2016
    Release Notes: Renamed script and added Script Variable support
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.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).
.COMPONENT
    ManageUsers
#>

[CmdletBinding()]
param (
    [Parameter()]
    [int]$OlderThan = "0",
    [Parameter()]
    [String]$FromCustomField
)
begin {
    if ($env:ageLimit -and $env:ageLimit -notlike "null") { $OlderThan = $env:ageLimit }
    if ($env:retrieveAgeLimitFromCustomField -and $env:retrieveAgeLimitFromCustomField -notlike "null") { $FromCustomField = $env:retrieveAgeLimitFromCustomField }

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

    function Test-IsSystem {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        return $id.Name -like "NT AUTHORITY*" -or $id.IsSystem
    }

    if (!(Test-IsElevated) -and !(Test-IsSystem)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
}
process {

    $Threshold = (Get-Date).AddDays(-$OlderThan)

    if ($FromCustomField) {
        $Threshold = (Get-Date).AddDays( - (Ninja-Property-Get $FromCustomField))
    }
    
    $CheckPoints = Get-VM | Get-VMSnapshot | Where-Object { $_.CreationTime -lt $Threshold }

    if (!$CheckPoints) {
        Write-Host "There are no checkpoints older than $Threshold!"
        exit 0
    }
    else {
        Write-Warning "There are checkpoints older than $Threshold!"
        $Checkpoints | Format-Table -Property VMName, Name, CreationTime | Out-String | Write-Host
        exit 1
    }
}end {
    
    
    
}

 

Desglose detallado del script

El script para automatizar las alertas de puntos de control de Hyper-V comienza especificando que requiere PowerShell versión 5.1. Incluye una sección .SYNOPSIS que explica su propósito: recopilar información sobre los puntos de control de Hyper-V en una máquina determinada, con un parámetro de umbral opcional para filtrar los puntos de control con una antigüedad superior a un número especificado de días. El script también acepta un campo personalizado entero para determinar este umbral.

Ejemplo de uso:

  • Sin parámetros: Muestra todos los puntos de control más antiguos que un umbral predeterminado.
  • Con el parámetro -OlderThan: Filtra los puntos de control anteriores al número de días especificado.
  • Con el parámetro -FromCustomField: Utiliza un campo personalizado para determinar el umbral.

Definiciones de los parámetros

El script acepta dos parámetros:

  • -OlderThan [int]: Especifica el número de días que se utilizará como umbral.
  • -FromCustomField [cadena]: Especifica el nombre de un campo personalizado que contiene el valor umbral.

Fase inicial: controles del entorno

El bloque de inicio del script para automatizar las alertas de puntos de control de Hyper-V establece comprobaciones y funciones de entorno para determinar si el script se está ejecutando con privilegios elevados o como la cuenta del sistema. Esto garantiza que el script pueda acceder a los recursos necesarios y realizar sus tareas sin problemas de permisos.

Funciones definidas

  • Test-IsElevated: comprueba si el script para automatizar las alertas de puntos de control de Hyper-V  se está ejecutando con privilegios de administrador.
  • Test-IsSystem: comprueba si el script para automatizar las alertas de puntos de control de Hyper-V se está ejecutando como la cuenta del sistema.

Si no se cumple ninguna de las dos condiciones, el script sale con un mensaje de error, lo que garantiza que se ejecuta en un contexto seguro.

Fase de procesamiento: filtrado de puntos de control

En el bloque de proceso, el script para automatizar las alertas de puntos de control de Hyper-V calcula la fecha umbral basándose en el parámetro OlderThan o en el valor del campo personalizado. Recupera todos los puntos de control de Hyper-V y los filtra en función de su hora de creación, comparándola con la fecha umbral.

Operaciones clave

  • Get-VM | Get-VMSnapshot | Where-Object { $_.CreationTime -lt $Threshold }: Recupera y filtra los puntos de control anteriores a la fecha umbral.
  • Muestra una advertencia si se encuentran puntos de control antiguos, listando sus detalles (nombre de la máquina virtual, nombre del punto de control, hora de creación).
  • Sale con un código de estado que indica si se han encontrado puntos de control antiguos.

Posibles casos de uso

Imagina a un profesional de TI que gestiona un gran entorno de puntos de control de Hyper-V con múltiples máquinas virtuales. Debe asegurarse de que los puntos de control con más de 30 días de antigüedad se revisan y eliminan para mantener un rendimiento y un uso del almacenamiento óptimos. Al ejecutar este script para automatizar las alertas de puntos de control de Hyper-V con el parámetro -OlderThan 30, puede identificar y abordar rápidamente los puntos de control obsoletos, evitando posibles problemas antes de que se agraven.

Comparaciones con otros métodos

Los métodos tradicionales de gestión de los puntos de control de Hyper-V implican comprobar manualmente cada máquina virtual, proceso que lleva mucho tiempo y es propenso a errores. Este script de PowerShell lo automatiza, proporcionando una forma rápida y fiable de supervisar los puntos de control. Otras soluciones pueden incluir herramientas de gestión de terceros, pero pueden ser costosas y requerir formación adicional.

Preguntas frecuentes

P: ¿Se puede ejecutar este script para automatizar las alertas de puntos de control de Hyper-V en cualquier sistema operativo Windows?

R: El script para automatizar las alertas de puntos de control de Hyper-V es compatible con Windows 10 y Server 2016 o posterior.

P: ¿Qué ocurre si el script para automatizar las alertas de puntos de control de Hyper-V no encuentra puntos de control antiguos?

R: Mostrará un mensaje indicando que no hay puntos de control más antiguos que el umbral especificado y saldrá con un código de estado 0.

P: ¿Cómo utilizo un campo personalizado para el umbral?

R: Especifica el nombre del campo personalizado con el parámetro -FromCustomField. Asegúrate de que el campo contiene el valor de umbral deseado en días.

Implicaciones para la seguridad y la eficiencia de las TI

Supervisar y gestionar regularmente los puntos de control de Hyper-V puede mejorar significativamente el rendimiento y la seguridad del sistema. Al identificar y abordar los puntos de control obsoletos, los profesionales de TI pueden evitar la saturación del almacenamiento y la posible degradación del rendimiento. Los scripts automatizados como éste garantizan una gestión coherente y eficaz de los puntos de control, liberando a los administradores para que puedan centrarse en tareas más críticas.

Buenas prácticas para utilizar el script

  • Ejecuta el script con privilegios administrativos para garantizar un acceso adecuado a todos los recursos necesarios.
  • Programa el script para que se ejecute a intervalos regulares mediante el Programador de tareas para una supervisión continua.
  • Revisa y ajusta el umbral OlderThan en función de las necesidades específicas de tu entorno.

Reflexiones finales

La gestión eficaz de los puntos de control de Hyper-V es esencial para mantener un rendimiento y una seguridad óptimos en los entornos virtualizados. Este script de PowerShell proporciona una solución potente y automatizada para supervisar y alertar a los administradores sobre los puntos de control obsoletos. Al integrar estas herramientas en sus flujos de trabajo, los profesionales de TI pueden garantizar que sus sistemas permanezcan limpios, eficientes y seguros.

NinjaOne ofrece una serie de herramientas y funciones que pueden mejorar aún más sus procesos de gestión de TI, proporcionando una solución integral para las tareas de supervisión, automatización y mantenimiento. La incorporación de NinjaOne con scripts como este puede agilizar tus operaciones y mejorar la eficiencia general.

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