Monter et démonter un ISO en PowerShell
Sommaire
I. Présentation
Parce que je suis sur que cette astuce vous sera utile dans votre script, j'en ai décidé d'en faire un tutoriel sur le sujet. En effet, nous verrons dans cet article comment manipuler un fichier ISO en PowerShell, sur Windows 8 ou Windows Server 2012 au minimum, Windows 10 et Windows Server 2016 étant fully compatible avec ce que l'on va voir dans ce tutoriel.
Note : PowerShell 3.0 minimum requis
On verra comment monter un ISO, comment le démonter, mais aussi comment récupérer la lettre du lecteur associé à l'image ISO car ce sera indispensable si l'on veut récupérer du contenu au sein de l'ISO que l'on monte.
II. Monter un ISO en PowerShell
Un commandlet natif à PowerShell nommé "Mount-DiskImage" permet de monter sur Windows des fichiers ISO (mais aussi des VHD ou VHDX), c'est lui que nous allons utiliser pour monter le fichier.
Voici la commande telle que je l'utilise et que je vous conseille de l'utiliser :
Mount-DiskImage -ImagePath <Path-to-ISO-file> -StorageType ISO -PassThru
On précise tout simplement le "ImagePath" qui correspond au chemin vers le fichier ISO et le "StorageType" qui est facultatif mais qui permet d'apporter la précision, pour indiquer qu'il s'agit d'un ISO. Si vous exécutez cette commande, dans l'explorateur de fichiers il doit y avoir un nouveau lecteur correspondant à votre fichier ISO.
III. Récupérer la lettre d'un ISO monté en PowerShell
Nous allons voir maintenant une méthode pour récupérer la lettre du lecteur sur lequel est monté l'image ISO, ce qui sera utile si vous souhaitez récupérer des fichiers situés dans l'image ISO. Dans le principe, on va stocker la commande de montage dans une variable puis ensuite on va la jouer avec un pipeline pour renvoyer sur Get-Volume. Enfin, on va récupérer seulement la propriété "DriveLetter" qui permet d'obtenir la lettre associée au lecteur.
Dans la pratique, ceci donne les deux lignes suivantes :
$MountISO = Mount-DiskImage -ImagePath <Path-to-ISO-file> -StorageType ISO -PassThru $LetterISO = ($MountISO | Get-Volume).DriveLetter
Si l'on joue la commande sans spécifier une propriété en particulier, on obtiendra le résultat complet de la commande "Get-Volume", et on peut voir qu'il y a bien une colonne DriveLetter :
DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining Size ----------- --------------- ---------- --------- ------------ ----------------- ------------- ---- D J_ARPI_A32FREO_EN-US_DV5 UDF CD-ROM Healthy OK 0 B 517.06 MB
Il suffira ensuite d'utiliser la variable $LetterISO qui contient uniquement la lettre pour pouvoir cibler l'ISO et récupérer des données. Il faudra penser à ajouter ":\" dans votre chemin après la lettre car là ce n'est pas inclus.
IV. Démonter un ISO en PowerShell
Pour finir, nous allons démonter un fichier ISO, c'est à dire qu'il n'apparaisse plus dans l'explorateur Windows, il suffira d'utiliser le commandlet "Dismount-DiskImage" sur le même principe que la syntaxe pour monter le fichier ISO. Voici un exemple :
Dismount-DiskImage -ImagePath <Path-to-ISO-file>
Il serait intéressant de définir une variable $ISO contenant le chemin vers l'ISO pour l'utiliser directement dans la commande Mount-DiskImage et Dismount-DiskImage, ainsi on simplifie la gestion du chemin et on est sûr de bien démonter ce que l'on a monté.
Finalement, si l'on veut résumer les commandes, voici quelques lignes pour monter un ISO, afficher sa lettre de lecteur et ensuite le démonter :
# Monter l'ISO $ISO = "C:\Users\Florian\Desktop\monISO.iso" $MountISO = Mount-DiskImage -ImagePath $ISO -StorageType ISO -PassThru # Récupérer la lettre de montage de l'ISO $LetterISO = ($MountISO | Get-Volume).DriveLetter # Démonter l'ISO Dismount-DiskImage -ImagePath $ISO