Come automatizzare gli avvisi sui checkpoint Hyper-V con PowerShell

La gestione efficiente degli ambienti Hyper-V è un compito fondamentale per i professionisti IT e i Managed Service Provider (MSP). Un aspetto di questa gestione consiste nel tenere traccia dei checkpoint, che sono essenziali per mantenere gli stati del sistema e garantire processi di ripristino senza intoppi. In questo articolo analizzeremo uno script PowerShell progettato per automatizzare il processo di monitoraggio e avviso agli amministratori dei checkpoint Hyper-V che superano una certa soglia di età.

Comprendere lo scopo e l’importanza dello script.

Lo script PowerShell fornito è uno strumento prezioso per gli amministratori IT che devono garantire che i loro ambienti Hyper-V rimangano puliti ed efficienti. I checkpoint, noti anche come snapshot, catturano lo stato di una virtual machine in un momento specifico. Sebbene siano utili per i backup e il ripristino, i checkpoint meno recenti possono consumare molto spazio di archiviazione e potenzialmente influire sulle prestazioni della virtual machine. Pertanto, è fondamentale monitorare e gestire regolarmente questi checkpoint.

Lo script per monitorare i checkpoint 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 {
    
    
    
}

 

Descrizione dettagliata dello script

Lo script per monitorare i checkpoint Hyper-V inizia specificando che richiede la versione 5.1 di PowerShell. Include una sezione .SYNOPSIS che spiega il suo scopo: raccogliere informazioni sui checkpoint Hyper-V su una determinata macchina, con un parametro di soglia opzionale per filtrare i checkpoint più vecchi di un determinato numero di giorni. Lo script accetta anche un campo personalizzato di numeri interi per determinare questa soglia.

Esempio di utilizzo:

  • Senza parametri: Visualizza tutti i checkpoint più vecchi di una soglia predefinita.
  • Con il parametro -OlderThan: Filtra i checkpoint più vecchi del numero di giorni specificato.
  • Con il parametro -FromCustomField: Utilizza un campo personalizzato per determinare la soglia.

Definizioni dei parametri

Lo script per monitorare i checkpoint Hyper-V accetta due parametri:

  • -OlderThan [int]: Specifica il numero di giorni da utilizzare come soglia.
  • -FromCustomField [string]: Specifica il nome di un campo personalizzato contenente il valore di soglia.

Fase iniziale: Controlli ambientali

Il blocco begin dello script per monitorare i checkpoint Hyper-V imposta i controlli dell’ambiente e le funzioni per determinare se lo script viene eseguito con privilegi elevati o come account di sistema. In questo modo si garantisce che lo script possa accedere alle risorse necessarie ed eseguire i suoi compiti senza problemi di autorizzazione.

Funzioni definite:

  • Test-IsElevated: Verifica se lo script per monitorare i checkpoint Hyper-V è in esecuzione con privilegi di amministratore.
  • Test-IsSystem: Controlla se lo script per monitorare i checkpoint Hyper-V è in esecuzione come account di sistema.

Se nessuna delle due condizioni è soddisfatta, lo script esce con un messaggio di errore, al fine di garantire l’esecuzione in un contesto sicuro.

Fase del processo: Filtraggio dei punti di controllo

Nel blocco di processo, lo script per monitorare i checkpoint Hyper-V calcola la data di soglia in base al parametro OlderThan o al valore del campo personalizzato. Recupera tutti i checkpoint Hyper-V e li filtra in base all’ora di creazione, confrontandola con la data di soglia.

Operazioni principali:

  • Get-VM | Get-VMSnapshot | Where-Object { $_.CreationTime -lt $Threshold }: Recupera e filtra i checkpoint più vecchi della data di soglia.
  • Visualizza un avviso se vengono trovati checkpoint più vecchi, mostrandone i dettagli (nome della virtual machine, nome del checkpoint, ora di creazione).
  • Esce con un codice di stato che indica se sono stati trovati vecchi checkpoint.

Casi d’uso potenziali

Immagina un professionista IT che gestisce un ambiente Hyper-V di grandi dimensioni con più virtual machine. Deve assicurarsi che i checkpoint più vecchi di 30 giorni vengano controllati ed eliminati per mantenere prestazioni e utilizzo dello storage ottimali. Eseguendo questo script per monitorare i checkpoint Hyper-V con il parametro -OlderThan 30, può identificare rapidamente i checkpoint obsoleti, prevenendo potenziali problemi prima che si aggravino.

Confronto con altri metodi

I metodi tradizionali di gestione dei checkpoint Hyper-V prevedono il controllo manuale di ogni virtual machine, che richiede molto tempo ed è soggetto a errori. Questo script PowerShell, invece, automatizza il processo, fornendo un modo rapido e affidabile per monitorare i checkpoint. Altre soluzioni possono includere strumenti di gestione di terze parti, che però possono essere costosi e richiedere una formazione aggiuntiva.

Domande frequenti

D: Questo script per monitorare i checkpoint Hyper-V può essere eseguito su qualsiasi sistema operativo Windows?

R: Lo script per monitorare i checkpoint Hyper-V supporta Windows 10 e Server 2016 e versioni successive.

D: Cosa succede se lo script per monitorare i checkpoint Hyper-V non trova vecchi checkpoint?

R: Viene visualizzato un messaggio che indica che non ci sono checkpoint più vecchi della soglia specificata e lo script per monitorare i checkpoint Hyper-V esce con un codice di stato pari a 0.

D: Come posso utilizzare un campo personalizzato per la soglia?

R: Specifica il nome del campo personalizzato con il parametro -FromCustomField. Assicurati che il campo contenga il valore di soglia desiderato espresso in giorni.

Implicazioni per la sicurezza e l’efficienza IT

Il monitoraggio e la gestione regolare dei checkpoint Hyper-V possono migliorare in modo significativo le prestazioni e la sicurezza del sistema. Identificando i checkpoint obsoleti e intervenendo di conseguenza, i professionisti IT possono prevenire il bloat dello storage e il potenziale degrado delle prestazioni. Gli script automatizzati come questo assicurano una gestione coerente ed efficiente dei checkpoint, permettendo agli amministratori di concentrarsi su attività più critiche.

Best practice per l’utilizzo dello script

  • Esegui lo script con privilegi amministrativi per garantire l’accesso a tutte le risorse necessarie.
  • Pianifica l’esecuzione dello script a intervalli regolari utilizzando Task Scheduler per un monitoraggio continuo.
  • Controlla e modifica la soglia OlderThan in base alle esigenze specifiche del tuo ambiente.

Considerazioni finali

Una gestione efficiente dei checkpoint di Hyper-V è essenziale per mantenere prestazioni e sicurezza ottimali negli ambienti virtualizzati. Questo script PowerShell fornisce una soluzione potente e automatizzata per monitorare e avvisare gli amministratori dei checkpoint obsoleti. Integrando questi strumenti nei loro flussi di lavoro, i professionisti IT possono garantire che i loro sistemi rimangano puliti, efficienti e sicuri.

NinjaOne offre una serie di strumenti e funzionalità che possono migliorare ulteriormente i processi di gestione IT, fornendo una soluzione completa per il monitoraggio, l’automazione e le attività di manutenzione. L’integrazione di NinjaOne con script di questo tipo può snellire le operazioni e migliorare l’efficienza complessiva.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.