banner
Centre d'Information
Améliorer constamment nos techniques et notre qualité pour rester à jour avec les tendances de l'industrie.

Comment utiliser PowerShell pour suivre les ressources VDI

Aug 07, 2023

Maxim_Kazmin - Fotolia

PowerShell est profondément intégré au système d'exploitation Windows, vous pouvez donc utiliser PowerShell pour rechercher les zones sous-utilisées de VDI.

Voici quelques méthodes de base que vous pouvez adapter à votre propre environnement pour utiliser PowerShell pour suivre les ressources VDI.

Si votre objectif est de créer un script PowerShell pour suivre l'utilisation des ressources VDI, vous devez d'abord créer une boucle capable de visualiser vos serveurs un par un. Pour ce faire, créez une liste de tous les serveurs.

Pour les besoins de cet article, je vais coder en dur les noms de serveur, mais vous pouvez plutôt concevoir le script pour interroger les noms ou extraire les noms d'un fichier texte. L’une ou l’autre méthode rendrait le script plus dynamique.

Voici une ligne de code qui crée un tableau contenant une liste de serveurs :

$Serveurs = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")

Cette ligne crée une variable appelée $Servers, qui contient une liste de serveurs Hyper-V nommés Hyper-V-1, Hyper-V-2, etc. Vous pouvez ajuster cette commande si vous utilisez une plateforme VDI qui n'est pas basée sur Hyper-V.

Maintenant que vous disposez d’une liste de serveurs mappés à une variable, l’étape suivante consiste à créer une boucle :

ForEach ($Serveur dans $Serveurs) {}

Cette boucle progresse dans la liste des serveurs un par un. Le code se termine par une série de parenthèses. Tout code que vous ajoutez entre les deux crochets s'appliquera à chaque serveur de la liste.

L'étape suivante consiste à écrire du code permettant de vérifier si un hôte VDI est sous-utilisé. Tout d’abord, vous devez déterminer ce que signifie la sous-utilisation d’un hôte.

Pour le bien de cet article, je vais définir un serveur sous-utilisé comme un serveur qui dispose de plus de 20 % de sa mémoire disponible. Cependant, vous devez utiliser une définition adaptée à votre propre environnement.

Voici à quoi ressemble mon script :

$Serveurs = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")ForEach ($Serveur dans $Serveurs) {

$ServerName = $Server$MySession = New-PSSession -ComputerName $ServerNameInvoke-Command -Session $MySession -ScriptBlock {

Write-Host $ServerName$TotalMemory = (Get-CimInstance Win32_OperatingSystem).TotalVisibleMemorySize$FreeMemory = (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory$TargetMemorySize = $TotalMemory * .2Write-Host "Mémoire totale :" $TotalMemoryWrite-Host "Mémoire libre : " $FreeMemoryIf ($FreeMemory -GT $TargetMemorySize) { Write-Host "Cet hôte est sous-utilisé"}If ($FreeMemory -LT $TargetMemorySize) {Write-Host "Cet hôte n'est pas sous-utilisé"}}}

Ce script suppose que tous les hôtes appartiennent au domaine et que Kerberos est l'authentificateur.

La première section du script définit la liste des hôtes qu'il interrogera, puis établit une boucle. Je vais créer une variable appelée $ServerName qui contient le nom du serveur que le script interroge actuellement.

Les deux lignes de code suivantes établissent une session à distance avec le serveur que la commande interroge. L'applet de commande Invoke-Command définit un bloc de script. Tout le code du bloc de script s'exécute sur une machine distante.

$MaSession = New-PSSession -ComputerName $ServerNameInvoke-Command -Session $MaSession -ScriptBlock {

Le contenu du bloc de script compare la mémoire totale du serveur à la mémoire utilisée pour déterminer si le serveur est sous-utilisé ou non. La variable $TotalMemory contient la quantité totale de mémoire installée sur le serveur, tandis que la variable $FreeMemory stocke la quantité de mémoire restante.

Dans cet exemple, les serveurs sous-utilisés utilisent moins de 80 % de la mémoire disponible. J'ai créé une variable appelée $TargetMemorySize qui contient une valeur égale à 20 % de la mémoire totale --$TotalMemory * .2. Cela me permet de comparer la quantité de mémoire libre du serveur – $FreeMemory – avec ma valeur cible – $TargetMemorySize – afin de déterminer si la machine est sous-utilisée ou non.

Par souci de simplicité, j'ai créé une version modifiée du script. J'ai supprimé la boucle et le code pour créer une session à distance. Ce script simplifié examine uniquement la machine locale au lieu d'interroger les hôtes distants. J'ai également ajouté une ligne de code pour afficher la taille de la mémoire cible. Voici le script simplifié :