Comment automatiser les alertes de points de contrôle Hyper-V avec PowerShell ?

La gestion efficace des environnements Hyper-V est une tâche essentielle pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP). L’un des aspects de cette gestion consiste à assurer le suivi des points de contrôle, qui sont essentiels pour maintenir l’état du système et garantir le bon déroulement des processus de récupération. Ce article explore un script PowerShell conçu pour automatiser le processus de surveillance et d’alerte des administrateurs concernant les points de contrôle Hyper-V qui dépassent un certain seuil d’âge.

Comprendre l’objectif et l’importance du script

Le script PowerShell fourni est un outil précieux pour les administrateurs informatiques qui doivent s’assurer que leurs environnements Hyper-V restent propres et efficaces. Les points de contrôle, également connus sous le nom d’instantanés ou snapshots, capturent l’état d’une machine virtuelle à un moment précis. Bien qu’ils soient utiles pour les sauvegardes et la restauration, les anciens points de contrôle peuvent consommer beaucoup d’espace de stockage et affecter les performances des machines virtuelles. Il est donc essentiel de surveiller et de gérer régulièrement ces points de contrôle.

Le script

#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 {
    
    
    
}

 

Description détaillée du script

Le script commence par préciser qu’il nécessite la version 5.1 de PowerShell. Il comprend une section .SYNOPSIS expliquant son objectif : rassembler des informations sur les points de contrôle Hyper-V sur une machine donnée, avec un paramètre de seuil optionnel pour filtrer les points de contrôle plus anciens qu’un nombre de jours spécifié. Le script accepte également un champ personnalisé de nombre entier pour déterminer ce seuil.

Exemple d’utilisation :

  • Sans paramètres : Affiche tous les points de contrôle plus anciens qu’un seuil par défaut.
  • Avec le paramètre -OlderThan : Filtre les points de contrôle plus anciens que le nombre de jours spécifié.
  • Avec le paramètre -FromCustomField : Utilise un champ personnalisé pour déterminer le seuil.

Définitions des paramètres

Le script accepte deux paramètres :

  • -OlderThan [int] : Spécifie le nombre de jours à utiliser comme seuil.
  • -FromCustomField [string] : Spécifie le nom d’un champ personnalisé contenant la valeur seuil.

Phase de démarrage : Contrôles de l’environnement

Le bloc de début du script met en place des contrôles d’environnement et des fonctions permettant de déterminer si le script s’exécute avec des privilèges élevés ou en tant que compte système. Cela garantit que le script peut accéder aux ressources nécessaires et effectuer ses tâches sans problème d’autorisation.

Fonctions définies :

  • Test-IsElevated : Vérifie si le script est exécuté avec des privilèges d’administrateur.
  • Test-IsSystem : Vérifie si le script est exécuté en tant que compte système.

Si aucune de ces conditions n’est remplie, le script se termine par un message d’erreur, ce qui permet de s’assurer qu’il s’exécute dans un contexte sécurisé.

Phase de traitement : Filtrage des points de contrôle

Dans le bloc de traitement, le script calcule la date seuil en fonction du paramètre OlderThan ou de la valeur du champ personnalisé. Il récupère tous les points de contrôle Hyper-V et les filtre en fonction de leur heure de création, en la comparant à la date seuil.

Opérations clés :

  • Get-VM | Get-VMSnapshot | Where-Object { $_.CreationTime -lt $Threshold } : Récupère et filtre les points de contrôle antérieurs à la date seuil.
  • Affiche un avertissement si des points de contrôle plus anciens sont trouvés, avec la liste de leurs détails (nom de la MV, nom du point de contrôle, heure de création).
  • Il se finit avec un code d’état indiquant si d’anciens points de contrôle ont été trouvés.

Cas d’utilisation potentiels

Imaginez un professionnel de l’informatique qui gère un vaste environnement Hyper-V composé de plusieurs machines virtuelles. Il doit s’assurer que les points de contrôle datant de plus de 30 jours sont examinés et supprimés afin de maintenir des performances et une utilisation de l’espace de stockage optimales. En exécutant ce script avec le paramètre -OlderThan 30, il peut rapidement identifier et traiter les points de contrôle obsolètes, prévenant ainsi les problèmes potentiels avant qu’ils ne s’aggravent.

Comparaisons avec d’autres méthodes

Les méthodes traditionnelles de gestion des points de contrôle Hyper-V impliquent de vérifier manuellement chaque machine virtuelle, ce qui prend du temps et est sujet à des erreurs. En revanche, ce script PowerShell automatise le processus et offre un moyen rapide et fiable de surveiller les points de contrôle. D’autres solutions peuvent inclure des outils de gestion tiers, mais ceux-ci peuvent être coûteux et nécessiter une formation supplémentaire.

Questions fréquemment posées

Q : Ce script peut-il être exécuté sur n’importe quel système d’exploitation Windows ?

R : Le script prend en charge Windows 10 et Server 2016 et les versions plus récentes.

Q : Que se passe-t-il si le script ne trouve pas d’anciens points de contrôle ?

R : Il affichera un message indiquant qu’aucun point de contrôle n’est plus ancien que le seuil spécifié et se finira avec un code d’état de 0.

Q : Comment utiliser un champ personnalisé pour le seuil ?

R : Spécifiez le nom du champ personnalisé avec le paramètre -FromCustomField. Assurez-vous que le champ contient la valeur seuil souhaitée en jours.

Implications pour la sécurité et l’efficacité informatiques

La surveillance et la gestion régulières des points de contrôle Hyper-V peuvent améliorer considérablement les performances et la sécurité du système. En identifiant et en corrigeant les points de contrôle obsolètes, les professionnels de l’informatique peuvent éviter l’augmentation du stockage et la dégradation potentielle des performances. Des scripts automatisés comme celui-ci assurent une gestion cohérente et efficace des points de contrôle, ce qui permet aux administrateurs de se concentrer sur des tâches plus importantes.

Bonnes pratiques de l’utilisation du script

  • Exécutez le script avec des droits d’administrateur pour garantir l’accès à toutes les ressources nécessaires.
  • Planifiez l’exécution du script à intervalles réguliers à l’aide du planificateur de tâches pour une surveillance continue.
  • Examinez et ajustez le seuil OlderThan en fonction des besoins spécifiques de votre environnement.

Conclusion

Une gestion efficace des points de contrôle Hyper-V est essentielle pour maintenir des performances et une sécurité optimales dans les environnements virtualisés. Ce script PowerShell fournit une solution puissante et automatisée pour surveiller et alerter les administrateurs sur les points de contrôle obsolètes. En intégrant ces outils dans leurs flux de travail, les professionnels de l’informatique peuvent s’assurer que leurs systèmes restent propres, efficaces et sûrs.

NinjaOne offre une gamme d’outils et de fonctionnalités qui peuvent améliorer vos processus de gestion informatique, en fournissant une solution complète pour les tâches de surveillance, d’automatisation et de maintenance. L’intégration de NinjaOne avec des scripts de ce type peut optimiser vos opérations et améliorer l’efficacité globale.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu'ils soient, sans avoir besoin d'une infrastructure complexe sur site. Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée, ou profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton “J’accepte” ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni “tel quel” et “tel que disponible”, sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).