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 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)}}
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.
Schreibe einen Kommentar