Windows Image Files (WIM) updaten, pflegen und benutzen

A screenshot of a cell phone

Da ich mich viel mit Deployment und Rollouts beschäftige, dachte ich, ich schreib mal ein paar Grundlagen Artikel, auf die ich dann verweisen kann. Das spart einem manchmal etwas Zeit in Workshops für die Interessanteren Dinge oder gibt Administratoren noch Anreize, was sie noch automatisieren können.

WIM Dateien, was ist das denn?

Mag der eine oder andere denken, Windows Image Media sind seit Windows 7 für Installationen im Einsatz. Es handelt sich um einen Container mit Daten, ähnlich einer VHD Datei. Diese WIM Dateien kommen bei verschieden Installationsarten zum Einsatz, zum Beispiel:

  • DVD-Medien
  • USB Installation
  • Windows Deployment Service (WDS)
  • System Center Configuration Manager (SCCM)
  • Andere Installationstools wie ZCM, Baramundi und Co.
  • Microsofts kleine Funktion WIM-Dateien in VHDX Dateien für Virtuelle Maschinen umzuwandeln. Diese nutze ich teilweise in meinen Skripten.

Wer sich jetzt fragt, “warum soll ich das Bearbeiten”, der installiert bitte mal Windows 7, 8, 10 oder Windows Server 2012R2/2016 mit einem “Release to Manufacturing” (RTM) Datenträger, also der ersten Offiziellen Version und spielt dann alle Updates ein. Aber auch kann es Sinnvoll sein, benötigte Treiber direkt einzubinden oder Windows-Features im Image zu aktivieren, bzw. zu deaktivieren.
Früher gab es einfache Möglichkeiten sollte “aktuellen” Datenträger zu erstellen, das nannte man eine “Slip stream CD”. Und ja, es geht heute noch, unter anderem. Die Kunden mit Volumenlizenzverträgen können sich aus dem Volumenlizenz Portal auch aktualisierte Datenträger herunterladen, aber die werden meistens nur einmal im Jahr aktualisiert.

WIM Images sind Container mit Partitionen. Für die Installation kommen meistens 2 verschiedene WIM Dateien zum Einsatz. Die Boot.WIM enthält den Bootbaren Installer mit allem was für das Installation Programm erforderlich ist. Die Install.WIM enthält die Dateien zur Installation. Eine Install.WIM von zum Beispiel Windows 10 kann verschiedene Editionen enthalten. Dies spart Platz bei den Installationsmedien.

Was kann man noch alles mit WIM Dateien machen?

Vieles, neben dem Hinzufügen von Windows Updates können auch zum Beispiel Treiber eingespielt werden. Hier sind noch ein paar Punkte:

  • Hinzufügen einer automatischen Antwortdatei
  • Hinzufügen oder Entfernen von Windows Features bei der Installation
  • Einspielen eines Windows Key
  • Hinzufügen von weiteren Dateien
  • Entfernen von Windows 10 Apps

Alles davon kann man auch mit dem Microsoft Deployment Toolkit (MDT) erreichen, aber für manche Kunden ist das zu viel Aufwand oder nicht automatisierbar genug.

Eine Möglichkeit wäre sich ein PowerShell Skript zu erstellen, dass das Installationsimage automatisch pflegt.

WIM-Dateien mit der PowerShell bearbeiten

Hinweis zu Programm und Power Shell Code

Der hier enthaltene Code dient als Beispiel. Ich übernehme keine Garantie, Gewährleistung oder Support für den Code oder Bestandteile. Verwendung des Codes erfolgt auf eigene Gefahr.
Ich empfehle immer sich die Skripte vor der Verwendung genau anzuschauen, was sie wirklich tun.

Es gibt einige Befehle rund um die WIM-Dateien, hier mal ein paar mit Beispielen, die ich oft benötige. Den Link zur Vollständigen List mit Erklärungen finden Sie am Ende des Artikels.:

Anzeigen vom Index in WIM Files mit Get-WindowsImage

Get-WindowsImage -ImagePath $WIMorg | Select ImageIndex,ImageName,@{Name="ImageSize (GB)";Expression={[math] ::round($_.ImageSize/1GB, 2)}}

Hier das Ergebnis für die Install.WIM für Windows 10 1809 Business Editionen. Hier kann auch gut mit Where-Filtern gearbeitet werden, um unabhängig der Anordnung der Editionen immer die Professional oder Enterprise zu selektiven.

$ProIndex = (Get-WindowsImage -ImagePath $WIMorg | ? { $_.ImageName -like "Windows 10 Pro" }).ImageIndex

Mounten von WIM-Dateien

Jetzt wo wir den Index kennen, können wir diesen Index zur Bearbeitung mounten. Dies geschieht mit dem Befehl “mount-WindowsImage”. Das Einbinden in das Verzeichnis dauert einen Moment, da die WIM-Dateien auch stark komprimiert sind. Wer im Übrigen eine Fehlermeldung mit dem Text “Mount-WindowsImage : Sie nicht zum Bereitstellen und Ändern dieses Abbilds berechtigt” erhält, sollte die WIM-Datei nicht versuchen direkt von der DVD oder der ISO zu mounten. Da kann die Änderung nicht gespeichert werden.

Der Befehl könnte so aussehen:

Mount-WindowsImage -Path "C:\Temp\wimtemp" -ImagePath $WIMorg -Index $ProIndex

Hinzufügen von Updates als CAB-Paketen und MSU-Dateien

Unterstützte Cabinet-Dateien (CAB) oder “Eigenständige Windows Updates” (MSU-Dateien) können mit dem Befehl “Add-WindowsPackage” installiert werden. Wichtig ist hier die richtige Reihenfolge für Abhängigkeiten bei den einzelnen Updates. Wenn die Updatedateien mit einer Reihenfolge benannt wurden, kann man sich das Leben einfach machen. Alternativ kann man es mit der “CreationTime” versuchen:

$Patches = ls $PATH -i "*.msu","*.cab" -r | Sort-Object -Property LastWriteTime
ForEach ($Patch in $Patches) { Add-WindowsPackage -PackagePath $Patch.fullname -Path "C:\Temp\wimtemp" -NoRestart -LogLevel Warnings -LogPath "C:\Temp$date-DISM-$Edition.log" }

Nicht alle MSU und CAB-Dateien können integriert werden. Zum Download der Updates kann der Updatekatalog verwendet werden. Wem das zu kompliziert ist, dem empfehle ich WSUSofflineUpdate.net.

Die Fehlermeldung 0x800f081e bedeutet das das Update nicht erforderlich ist. Dieser Fehler kann also ignoriert werden.

Windows Features in einer WIM-Datei installieren / deinstallieren

Natürlich kann man auch Features in einem WIM-Image aktivieren oder deaktivieren. Dies ist praktisch, wenn zum Beispiel .Net 3.5 oder Zugriff auf SMB1-Server benötigt wird. Eine Liste mit allen Features des WIM-Images samt Technischen Namen erhalten Sie mit dem Befehl:

Get-WindowsOptionalFeature -Path "C:\Temp\wimtemp" | FT -AutoSize

Der Status “Enabled” bzw. “Disabled” sind selbsterklärend. Es gibt aber auch noch “DisabledWithPayloadRemoved”, zum Beispiel bei .Net 3.5. Dies bedeutet, die Quellen sind nicht im Image enthalten und müssen angegeben werden.

Der Befehl Zugriff aus SMB1-Server zu ermöglichen ist zum Beispiel:

Enable-WindowsOptionalFeature -Path "C:\Temp\wimtemp" -FeatureName "SMB1Protocol-Client" -all

Für die Installation von .Net muss eine Quelle mit angegeben werden. Dafür eignet sich eine SXS-Freigabe oder das passende Verzeichnis der DVD/ISO (D:\Sources\sxs). Der Befehl dazu ist:

Enable-WindowsOptionalFeature -Path "C:\Temp\wimtemp" -FeatureName "NetFx3" -all -Source D:\sources\sxs

Um auch das Abschalten mit einem Beispiel zu versehen, hier das Beispiel zum Deaktivieren der XPS Druckfunktion:

Disable-WindowsOptionalFeature -Path "C:\Temp\wimtemp" -FeatureName "Printing-XPSServices-Features"

Entfernen von Windows Apps im Image

Zu nächst muss geklärt werden, welche Anwendungen im Image vorhanden sind. Dazu gibt es die PowerShell-Befehle aus der “AppxProvisionedPackage” Reihe. Zum Auslesen welche Appx-Anwendungen im Image sind, ist der folgende Befehl geeignet:

Get-AppxProvisionedPackage -Path "C:\Temp\wimtemp" | select Displayname, PackageName | ft -AutoSize

Zum Entfernen empfehlen sich wieder Where-Klauseln:

Get-AppxProvisionedPackage -Path "C:\Temp\wimtemp" | ? { $_.DisplayName -like "Microsoft.Xbox*" } | Remove-AppxProvisionedPackage -Path "C:\Temp\wimtemp"

Wichtiger Hinweis, nicht alle Apps lassen sich so entfernen.

Speichern der WIM-Datei

Nach dem Modifizieren der WIM-Datei muss diese gespeichert werden. Dies kann mit dem Befehl “Dismount-WindowsImage” erreicht werden. Die Syntax ist:

Dismount-WindowsImage -Path "C:\Temp\wimtemp" -save -Verbose

WIM fertig und nun?

Die fertige WIM Datei kann nun genutzt werden, zum Beispiel im WDS oder einem Bootmedium.

Wer jetzt noch etwas Optimieren möchte, der kann sich die folgenden Befehle zur weiteren Optimierung anschauen:

Add-WindowsDriver: Hinzufügen von Windows Treiben zum Image

Remove-WindowsImage: Entfernen von nicht benötigten Partitionen im WIM (Zum Beispiel die “N” Editionen)

Alle PowerShell Befehle für das Modul DISM finden Sie bei Microsoft DOCS.

Autor: Fabian Niesen

Fabian Niesen ist seit Jahren beruflich als IT-Consultant unterwegs. Hier schreibt er privat und unabhängig von seinem Arbeitgeber. Unter anderem ist er Zertifiziert als MCSA Windows Server 2008 / 2012, MCSA Office 365, MCSA Windows 10, MCSE Messaging, MCT und Novell Certified Linux Administrator. Seit 2016 ist er auch MCT Regional Lead für Deutschland. Seine Hobby’s sind Social Media, Bloggen, Mittelaltermärkte, Historische Lieder und der Hausbau. Zu finden ist er auch auf folgenden Plattformen: -

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere