ISO laden in Powershell

Wie lädt man ein ISO-File unter Windows mit Powershell.

Ein kleines Ziel von mir ist aktuell das automatisierte Installieren von einem vCenter Server mit ein paar Hosts. Dafür muss ich aber vorgängig ein ISO unter Windows mounten, damit ich an die JSON-Files und die Installationsroutine komme. Die Idee dahinter ist die:

Mounten des ISOs -> Einlesen der JSON aus der Vorlage -> Erstellen der angepassten JSON -> VCSA installieren via JSON.

Damit ist mal das Management sichergestellt, dann gehören nur noch ein paar ESXi-Hosts dazu, die automatisch ins vCenter aufgenommen werden sollen mit meinen Standard-AdvancedSettings, die ich auf allen Hosts nutze, sowie NTP Settings. Damit sollte ein HomeLab ganz gemütlich angeschubst werden können und komplett eingerichtet sein.

First Step: Mounten des ISOs:

Es gibt verschiedene Wege, die zum Ziel führen. Hier mal der "lange" Weg:

Mount-DiskImage -ImagePath '\\STORAGE\iso\VMware\vSphere 6.7\VCSA\VMware-VCSA-all-6.7.0-9451876.iso'
Get-DiskImage '\\STORAGE\iso\VMware\vSphere 6.7\VCSA\VMware-VCSA-all-6.7.0-9451876.iso' | Get-Volume

In der ersten Zeile wird das DiskImage geladen, bitte prüfe vorher, ob die Datei vorhanden ist. Ob mit Try - Catch oder mit einer Voraussetzungsüberprüfung ist dir überlassen. In der Zweiten Zeile geht es ans eruieren des Laufwerkbuchstabens. Wenn man direkt den Driveletter in einer Variable haben möchte, könnte man das wie folgt machen.

$DriveLetter = (Get-DiskImage '\\STORAGE\iso\VMware\vSphere 6.7\VCSA\VMware-VCSA-all-6.7.0-9451876.iso' | Get-Volume).DriveLetter

Wie gestaltet man das noch eine Spur kompakter auf einen Einzeiler? So:

Mount-DiskImage -ImagePath '\\STORAGE\iso\VMware\vSphere 6.7\VCSA\VMware-VCSA-all-6.7.0-9451876.iso' -PassThru | Get-Volume

Mit dem Parameter PassThru schickt man das Resultat-Objekt weiter in der Pipeline, die würde ansonsten leer bleiben. So kann man direkt im Anschluss mit Get-Volume den Laufwerksbuchstaben eruieren, welcher zugewiesen wurde. Nun möchte man das ganze direkt in der Variable? Kein Problem:

$DriveLetter = (Mount-DiskImage -ImagePath '\\STORAGE\iso\VMware\vSphere 6.7\VCSA\VMware-VCSA-all-6.7.0-9451876.iso' -PassThru | Get-Volume).DriveLetter

 

Wenn man nun das Image nicht mehr benötigt und loswerden will, dann passiert das am einfachsten via:

Dismount-DiskImage -ImagePath '\\STORAGE\iso\VMware\vSphere 6.7\VCSA\VMware-VCSA-all-6.7.0-9451876.iso'

Schon ist das Ding wieder weg vom System.


Drucken