Windows Image Files (WIM) updaten, pflegen und benutzen

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.

Windows Image Files (WIM) updaten, pflegen und benutzen - 9f9ed1b716264ada87adfe8077267586 - 1

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 PowerShell 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)}}
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag1 - 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
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag2 - 3

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
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag3 - 4

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.

Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag4 - 5

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
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag5 - 6

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
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag6 - 7

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
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag7 - 8

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"
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag8 - 9

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
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag9 - 10

Zum Entfernen empfehlen sich wieder Where-Klauseln:

Get-AppxProvisionedPackage -Path "C:\Temp\wimtemp" | ? { $_.DisplayName -like "Microsoft.Xbox*" } | Remove-AppxProvisionedPackage -Path "C:\Temp\wimtemp"
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag10 - 11

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
Windows Image Files (WIM) updaten, pflegen und benutzen - 030419 0946 WindowsImag11 - 12

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.