Tags: PowerShell, Patch-Management, OS Deployment
Das Deployment Image Servicing and Management (DISM) hat sich als zentrales Tool für das Image- und Package-Management unter Windows etabliert. Das Dienstprogramm ist mit seinen zahlreichen Optionen und seiner inkonsistenten Syntax jedoch schwierig zu nutzen. Das mit PowerShell 4.0 eingeführte DISM-Modul bietet demgegenüber etliche Vorteile.
Unter Windows 8 avancierte DISM zu alleinigen Werkzeug für das Image-Management, nachdem es unter Windows 7 einige Aufgaben wie das Erfassen von Abbildern noch ImageX überlassen hatte. Über die Verwaltung von WIM-Dateien hinaus erweiterte Microsoft das Einsatzgebiet von DISM auf virtuelle Laufwerke (VHD und VHDX).
Bessere Usability von PowerShell
Mit der Zahl der Optionen nahm allerdings auch die Unübersichtlichkeit des Tools zu. PowerShell bringt hier schon deswegen eine Verbesserung, weil sich der Funktionsumfang von DISM dort auf zahlreiche Cmdlets verteilt, deren Zweck aus ihrem Namen ersichtlich ist:
Get-Command -Module DISM -CommandType Cmdlet
Einen zusätzlichen Fortschritt bei der Usability bringen die sprechenden Parameternamen. Anders als bei DISM kann man sie mittels IntelliSense in PowerShell automatisch vervollständigen und muss sich nicht mit langen Hilfetexten herumschlagen.
Images mounten, speichern und unmounten
Wenn man Systemabbilder offline warten will, dann besteht der erste Schritt darin, dass man sie in einem Verzeichnis mountet. Mit PowerShell würde der entsprechende Befehl beispielsweise so aussehen:
Mount-WindowsImage -ImagePath d:\sources\boot.wim -Path .\mount\ -Index 1
Mit diesem Aufruf von Mount-WindowsImage würde das erste Image in boot.wim im Unterverzeichnis mount bereitgestellt. Der Aufruf erfolgt bei VHD(X) nach dem gleichen Muster, nur dass der Wert für den Parameter Index dort immer 1 sein muss.
Wenn man erst herausfinden möchte, wie viele Images in einer WIM enthalten sind und welchen Index das gewünschte Abbild hat, dann gibt man
Get-WindowsImage -ImagePath .\install.wim
ein.
Für die gegenteilige Operation, nämlich das Aushängen eines Abbilds, ist Dismount-WindowsImage zuständig. Dem Cmdlet muss man mitteilen, ob man vorgenommene Änderungen speichern oder verwerfen möchte. Diesem Zweck dienen die Schalter save bzw. discard:
Dismount-WindowsImage -Path .\mount\ -Discard
Entscheidet man sich für das Speichern, dann kann man zusätzlich den Parameter Append verwenden, um das Image mit einem neuen Index an die WIM-Datei anzuhängen anstatt die Änderungen in das ursprüngliche Abbild zurückzuschreiben:
Dismount-WindowsImage -Path .\mount -save -Append
Möchte man nur die Änderungen speichern, ohne das Image zu unmounten, dann hilft das Cmdlet Save-WindowsImage weiter. Im muss man nur das Mount-Verzeichnis für das Image mitteilen:
Save-WindowsImage -Path c:\mount
Auch dieses Cmdlet unterstützt den Schalter Append.
Packages und Treiber einspielen oder entfernen
Zu den häufigsten Aufgaben des so genannten Offline-Servicing zählt das Aktualisieren eines Images mit Updates oder das Hinzufügen von Treibern, die nicht zum Lieferumfang des Betriebssystems gehören.
Den aktuellen Stand der installierten Pakete kann man nach diesem Muster
Get-WindowsPackage -Path $PWD\mount
abfragen. Das Pendant zum Auslesen der hinzugefügten Treiber ist Get-WindowsDriver. Beide Cmdlets lassen sich auch auf ein eingeschaltetes Windows anwenden, indem man statt des Parameters Path den Schalter Online verwendet.
Pakete fügt man in Form von .msu- oder .cab-Dateien hinzu, und zwar mit Hilfe von Add-WindowsPackage:
Add-WindowsPackage -Path $PWD\mount -PackagePath "$PWD\My-KB-Package.cab"
Gibt man für den PackagePath anstelle einer Datei ein Verzeichnis an, dann übernimmt das Cmdlet alle darin enthaltenen Dateien mit der Endung .msu oder .cab.
Das Hinzufügen von Treibern erfolgt nach dem gleichen Muster, nur dass man es dort mit .inf-Dateien zu tun hat und dafür das Cmdlet Add-WindowsDriver verwendet. Beide lassen sich auch online einsetzen.
Um Packages und Treiber zu entfernen, greift man zu den Cmdlets Remove-WindowsPackage bzw. Remove-WindowsDriver. Beide erwarten den Namen des Pakets bzw. Treibers als Wert für den Parameter PackageName bzw. Driver. Diese Angaben erhält man wie oben gezeigt mit Hilfe von Get-WindowsPackage oder Get-WindowsDriver.
Features aktivieren oder deaktivieren
Das DISM-Modul stellt auch die Mittel zur Verfügung, um Windows-Features zu aktivieren oder wieder abzuschalten. Bei den Client-Versionen handelt es sich um jene Features, die man bei einem Online-System in der Systemsteuerung unter Programme zu- und abschalten kann. Auf dem Server installiert bzw. entfernt man damit jedoch alle Rollen und Features.
Um einen Überblick zu erhalten, welche Features verfügbar und welche davon aktiviert sind, ruft man Get-WindowsOptionalFeature auf:
Get-WindowsOptionalFeature -Online | ? State -eq enabled
Dieses Kommando würde den Namen aller Features anzeigen, die bereits aktiviert sind.
Für das Hinzufügen ist Enable-WindowsOptionalFeature zuständig. Es erwartet den Namen des Features, den man wie gerade gezeigt mit Get-WindowsOptionalFeature ermitteln kann. Für die gegenteilige Operation gibt es Disable-WindowsOptionalFeature:
Disable-WindowsOptionalFeature -Path $PWD\mount -FeatureName SMB1Protocol
Dieser Aufruf würde SMB 1.0 aus dem Image entfernen, das in mount unterhalb des aktuellen Arbeitsverzeichnisses eingehängt ist. Der Befehl ließe sich mit dem Schalter Online auch auf das aktuell ausgeführte Windows anwenden.
Store Apps entfernen
Das DISM-Modul enthält auch die Cmdlets, mit denen sich die im Image bereitgestellten Store Apps anzeigen und entfernen lassen. Diese Aufgabe kommt Get-AppxProvisionedPackage und Remove-AppxProvisionedPackage zu.
Wie man sie nutzt, um nicht benötigte Apps zu entfernen, beschreibt mein Beitrag Vorinstallierte Store Apps aus Image von Windows 10 entfernen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Windows-Images mit OSDBuilder automatisch offline aktualisieren
- Microsoft Defender: Updates für Viren-Signaturen über Gruppenrichtlinien und PowerShell steuern
- Gartner Quadrant zu Unified Endpoint Management: Microsoft und VMware führend, nur 6 Hersteller im Vergleich
- Exchange 2019: Neue Intervalle für CUs, kostenlose Hybrid-Lizenz, Update für Management Tools
- Windows Update for Business via Deployment Service und PowerShell steuern
Weitere Links