Statt DISM: Images mounten, Packages und Features verwalten mit PowerShell

    Client-Management-ToolsDas Deployment Image Servicing and Manage­ment (DISM) hat sich als zen­trales Tool für das Image- und Package-Manage­ment unter Windows etab­liert. Das Dienst­pro­gramm ist mit seinen zahl­reichen Optionen und seiner inkon­sis­tenten Syn­tax jedoch schwie­rig zu nutzen. Das mit Power­Shell 4.0 eingeführte DISM-Modul bietet dem­gegenüber etliche Vor­teile.

    Unter Windows 8 avancierte DISM zu alleinigen Werkzeug für das Image-Manage­ment, 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über­sichtlichkeit 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

    Das DISM-Modul von PowerShell enthält insgemsat 39 Cmdlets.

    Einen zusätzlichen Fortschritt bei der Usability bringen die sprechenden Parameter­namen. 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.

    Get-WindowsImage zeigt, welche Images in einer WIM enthalten sind.

    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ück­zuschreiben:

    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 Betriebs­systems 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.

    Get-WindowsPackage zeigt die installierten Pakete an.

    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.

    PowerShell bietet eine Alternative zum interaktiven Freischalten von 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 Arbeits­verzeichnisses 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.

    Keine Kommentare