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.