ISO-Dateien in eine Vhd-Datei konvertieren mit Hilfe eines (PowerShell-) Skriptes

In mehreren Kapiteln meines Windows 10-Ratgebers geht es um den Umgang mit ISO- und Vhd-Dateien. Eine ISO-Datei dürfte jeder schon einmal verwendet haben. Microsoft stellt solche Abbilddateien bereits seit vielen Jahren bei allen möglichen Gelegenheiten zur Verfügung. Entweder direkt oder wie bei Winbdows 10 über den Umweg des Media Creation Tools, mit dessen Hilfe man die Windows 10-Installationsdateien herunterlädt und auf Wunsch als ISO-Datei speichert, so dass mit dieser z. B. einen Computer bootet, um damit Windows 10 zu installieren.

Eine ISO-Datei fasst das komplette Abbild eines Laufwerks in einer Datei zusammen. Brennt man die ISO-Datei auf eine DVD, entsteht so ein bootfähiges Medium.

Auch eine Vhd-Datei fasst ein komplettes Laufwerk in einer Datei zusammen. ISO- und Vhd-Dateien unterscheiden sich sowohl im Aufbau als auch bezöglich ihres Verwendungszwecks. Während ISO auf einem international anerkannten Standard basiert, ist Vhd eine „Erfindung“ von Microsoft (bzw. der Firma Connector, deren Produkt Microsoft vor vielen Jahren eingekauft hatte und aus dem später Virtual PC und Virtual Server wurden, die es beide aber schon lange nicht mehr gibt). Vhd-Dateien werden nahezu ausschließlich für virtuelle Festplatten im Zusammenhang mit Hyper-V eingesetzt. Auch Virtual Box kann Vhd-Dateien als Laufwerke mounten, wer VMWare verwendet, muss die Vhd-Datei mit dem V2V Converter von Starwind in eine Vmk-Datei konvertieren.

Für das Anlegen einer VM wäre es manchmal praktischer, wenn anstelle der ISO-Datei das Installationsmedium als Vhd-Datei zur Verfügung st+nde. Die Konvertierung einer ISO- in eine Vhd-Datei ist mit den Bordmitteln von Windows 10 alleine nicht möglich. Es gibt aber ein Skript, mit dem die Konvertierung relativ einfach möglich ist. Es gibt nur ein kleines Problem: Das Skript gibt es aktuell nur als Teil eines Windows Server 2016-Installationsmedium, also innerhalb einer ISO-Datei. Und wie kommt man an diese ISO-Datei? Am einfachsten über den Download einer kostenlosen Testversion von Windows Server 2016. Die Frage ist nur, ob man ca. 4 GB an Daten heunterlädt wegen eienr Datei, die nur ein paar KB groß ist. In Zeiten von 50000er-DSL dauert der Download zwar nur ein paar Minuten, aber vielen dürfte das doch gegen das Verhältnismäßigkeits-Prinzip verstoßen. Könnte daher der Autor nicht einfach… Leider nicht, denn auch wenn es nur ein harmloses Skript ist, unterliegt es offiziell der Lizenzierung von Windows Server 2016 durch Microsoft und darf daher, wie jede andere Datei auch, nicht zum freienn Download durch eine dritte Person angeboten werden.

Wichtig: Ein Skript mit dem Namen Convert-Image.ps1 wird auch im Rahmen der TechNet Script Gallery angeboten. Aus welchen Gründen auch immer ist dies die falsche Version, die unter Windows 10 leider nicht funktioniert.

Im Folgenden tue ich daher so als hätten Sie sich das Skript auf irgendeine (legale) Weise besorgt und es befindet sich z.B. im Dokumente-Verzeichnis. Ferner kennen Sie den Namen und Pfad der zu konvertierenden ISO-Datei.

Schritt 1: Starten Sie die PowerShell (am besten als Administrator)

Schritt 2: Stellen Sie sich sicher, dass auf Ihrem Computer PowerShell-Skripte ausgeführt werden können.

Geben Sie dazu ein:

Get-ExecutionPolicy

Gibt der Befehl „Restricted“ zurück? Dann müssen Sie mit dem folgenden Befehl die Ausführungsrichtlinie auf „Unrestricted“ setzen:

Set-ExecutionPolicy Unrestricted -Force -Scope CurrentUser

Schritt 3: Laden des Skripts in die PowerShell ISE

Schritt 4: Führen Sie das Skript per F5-Taste aus.

Damit wird lediglich die Function-Definition des Skripts ausgeführt, es passiert noch nichts.

Schritt 5: Geben Sie den Befehl für die Konvertierung ein

Geben Sie den folgenden Befehl entweder in einem neuen Fenster der ISE oder in der Konsole ein.

$ISOPath = "E:\ISO\de_windows_10_pro_10240_x86_dvd.iso"
$VhdPath = "E:\Win10.vhd"
$Edition = "Pro"
Convert-WindowsImage -SourcePath $ISOPath -Edition $Edition -DiskLayout BIOS -VHDPath $VhdPath

Damit das Ganze auch funktioniert, müssen Sie die Pfade für die ISO- und die Vhd-Datei entsprechend anpassen. Über die Variable $Edition und ihren Wert „Pro“ wird das Image für die Pro-Edition konvertiert, die Alternative wäre die Angabe „Home“ für die Home Edition.

Die Befehle für die Konvertierung wurden in die PowerShell ISE eingegeben

Schritt 6:

Starten Sie die Konvertierung

Wenn Sie die eingegebenen Befehle ebenfalls per F5 starten und keine Fehler gemacht haben, sollte die Konvertierung starten. Als erstes werden ein paar Kontrollmeldungen in der Konsole ausgegeben. Sind alle „Vorabtests“ abgeschlossen, wird die eigentliche Konvertierung durchgeführt, die Sie anhand eines Fortschrittsbalkens verfolgen.

Die PowerShell-Skripte aus Kapitel 27

In Kapitel 27 geht es um die Themen Eingabeaufforderung (cmd.exe) und PowerShell. Mit beiden Programmen lässt sich ein Windows-Computer ganz bequem und elegant, sofern man sich erst einmal an die Befehlseingabe über Tastatur, das schwarze oder blaue Fenster und den fehlen des üblichen Fensterkomforts gewöhnt hat, steuern. Was kann man sich darunter vorstellen? Nun, man kann sich z.B. eine Liste aller installierten Updates nicht nur ausgeben, sondern auch in eine Html-Datei schreiben und/oder ausdrucken lassen. Was ist im Rahmen der Benutzeroberfläche nicht möglich. Ein anderes Beispiel: Ich möchte eine Speicherkarte mit Tausenden von Bildern auf die Festplatte kopieren und dabei die Bilder auf Ordner verteilen, deren Name dem Monatsnamen entspricht, in dem das Bild entstanden ist. Das wäre im Explorer ein Projekt für die Weihnachtsfeiertage, im Alltag hat man dazu im Allgemeinen weder die Zeit noch die Lust dazu. Mit einem Skript lässt sich das mit einem Klick per rechter Maustaste auf die Ps1-Datei und Auswahl von „Mit Powershell ausführen“ erledigen. Noch ein Beispiel? Ich möchte meine Sammlung von Wav-Dateien in das Mp3-Format konvertieren. Mit dem Freeware-Tool ffmpeg.exe, das ich ebenfalls in einem Skript ausführe, ist das ebenfalls kein Problem.

Hört sich gut an? Es gibt leider, wie immer, einen sprichwörtlichen Haken. Wie alles muss man auch den Umgang mit der PowerShell, der Eingabeaufforderung und ihrer Stapeldateien oder der Bash-Shell, die im Linux-Subsystem von Windows 10 ausgeführt wird, erst einmal erlernen. Das kostet Zeit, viel Geduld und vor allem Ausdauer und ein gewwisses „Gefühl“ für die typische Wenn-Dann-Computerlogik. Wer sich bereits mit Programmierung auskennt, ist natürlich im Vorteil, da er oder sie mit dieser Logik, Begriffen wie Variablen, Entscheidungen oder Datentypen bereits vertraut ist. Ich denke, der Aufwand lohnt sich, denn man erhält als Belohnung für die Mühe eine Menge neuer Möglichkeiten und wird in die Lage versetzt, den Computer so zu bedienen wie es ursprünglich einmal (das liegt schon „ein paar“ Jahre zurück) der einzige Weg war.

Die Skripte, die ich in Kapitel 27 vorstelle, sowie die „etwas“ längere Befehlsfolge auf Seite 559 zur Ausgabe der Namen der Systemdienste, die vom Systemprogramm Svchost ausgeführt werden, kann man unter dem folgenden Link als Zip-Datei herunterladen:

Die Skripte aus Kapitel 27

Die Zip-Datei enthält eine Reihe von PowerShell-Skripten als Ps1-Dateien.

Was mache ich damit? Die folgende Schrittfolge ist nur eine Empfehlung, da es mehrere Möglichkeiten gibt, um eine PowerShell-Skriptdatei (Ps1-Datei) auszuführen.

1) Ein neues Verzeichnis, z.B. im Dokument-Ordner, mit dem Namen „PowerShell“ anlegen (oder einem anderen Namen)
2) Die Zip-Datei mit der rechten Maustaste anklicken, Eigenschaften wählen und das Häkchen bei „Zulassen“ setzen (ist kein Häkchen zu sehen, ist alles in Ordnung)
3) Die Ps1-Dateien in den angelegten Ordner kopieren
4) Die PowerShell als Administrator starten
5) Den Befehl „Set-ExecutionPolicy RemoteSigned -Force“ eingeben (die Groß-/Kleinschreibung spielt keine Rolle)
6) Die PowerShell ISE starten
7) Die Ps1-Datei über das Datei-Menü laden
8) Darauf achten, ob die Pfade stimmen
9) Das Skript mit der F5-Taste ausführen

Sollten Fehlermeldungen (in rot) die Folge sein, muss eventuell noch ein Verzeichnispfad angepasst werden.

Das in dem Skript Wav nach Mp3-Konvertierung verwendete Programm Ffmpeg.exe muss zuerst unter der folgenden Adresse heruntergeladen und die Datei in das Verzeichnis kopiert werden, in dem sich die Ps1-Datei befindet:

https://ffmpeg.zeranoe.com/builds/