Comment obtenir l’espace disque restant en PowerShell ?
I. Présentation
Dans ce nouvel article, nous allons apprendre à récupérer l'espace disque restant sur une machine à l'aide de PowerShell. Sur les machines équipées d'un disque SSD et où la capacité peut être limitée, les Go sont une denrée précieuse pour le stockage... PowerShell peut nous permettre de surveiller l'utilisation du stockage.
Ceci nécessite d'utiliser le cmdlet Get-WmiObject pour s'intéresser directement à la classe Win32_LogicalDisk, alors si vous êtes prêt, on va commencer...
II. PowerShell et l'espace disque
Ouvrez une console Windows PowerShell ou Windows Terminal, et saisissez la commande suivante :
Get-WmiObject Win32_LogicalDisk
D'ailleurs, la commande complète est :
Get-WmiObject -Class Win32_LogicalDisk
Cette commande va retourner un résultat comme celui-ci :
La propriété "FreeSpace" permet d'obtenir l'espace disque restant. Le problème c'est que le résultat est en octet... Disons que ce n'est pas ce qu'il y a de plus lisible. Pour cela, on va appliquer un "Select-Object" sur la précédente commande avant de sélectionner seulement les propriétés que l'on souhaite, et nous allons en profiter pour réaliser un calcul sur la propriété FreeSpace afin de retourner l'espace disque restant Go.
Ce qui donne :
Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property DeviceID, VolumeName, @{ label='FreeSpace' expression={($_.FreeSpace/1GB).ToString('F2')} }
En complément de la vision par 1GB, la méthode ToString() permet de formater la sortie est de limiter à 2 chiffres après la virgule. Cette fois-ci, on peut voir précisément que l'espace disque restant est de 49,16 Go sur le volume C.
De la même manière, nous pouvons utiliser la commande Get-CimInstance sur le même principe :
Get-CimInstance -Class Win32_LogicalDisk | Select-Object -Property DeviceID, Name, @{ label='FreeSpace' expression={($_.FreeSpace/1GB).ToString('F2')} }
La valeur retournée pour la propriété FreeSpace sera bien sûr la même dans les deux cas.
Note : la commande Get-WmiObject n'est pas compatible avec PowerShell mais seulement avec Windows PowerShell. La commande Get-CimInstance quant à elle est compatible avec les deux.
Nous pourrions également faire l'inverse : afficher l'espace disque utilisé au lieu de l'espace disque disponible. Pour cela, c'est relativement simple avec un petit calcul mathématique : l'espace total que l'on obtient via la propriété Size et auquel on soustrait l'espace libre. Ce qui donne la naissance à une nouvelle propriété calculée que l'on peut appeler "UsedSpace" :
Get-CimInstance -Class Win32_LogicalDisk | Select-Object -Property DeviceID, Name, @{ label='UsedSpace' expression={(($_.Size - $_.FreeSpace)/1GB).ToString('F2')} }
Une autre façon de faire, consiste à stocker la liste des volumes dans une variable $ListDisk. Ensuite, le contenu de cette variable peut être parcouru via une boucle Foreach, ceci permettra de récupérer l'espace disque disponible, mais aussi de réaliser d'autres actions éventuellement. Par exemple : si l'espace disque est inférieur à 10 Go, envoyer un e-mail ?
Voici comment créer cette boucle en stockant l'espace disque disponible dans la variable $DiskFreeSpace pour chaque volume :
$ListDisk = Get-WmiObject -Class Win32_LogicalDisk Foreach($Disk in $ListDisk){ $DiskFreeSpace = ($Disk.freespace/1GB).ToString('F2') Write-Host "L'espace disque restant sur $($Disk.DeviceID) est de $DiskFreeSpace Go" }
A vous de jouer : il ne vous reste plus qu'à choisir la méthode qui est la plus adaptée à ce que vous souhaitez faire et à votre environnement ?