setupconfig.ini: Installation von Funktions-Updates für Windows 10 anpassen

    Windows 10 Feature-UpdateSpielt man ein neues Release von Windows 10 über Windows Update oder WSUS ein, dann startet die auto­matische Instal­lation, sobald das Update für den PC ver­fügbar ist. Man muss aber nicht ein­fach die Standard­prozedur durch­laufen lassen, sondern kann das Setup über eine Konfigu­rations­datei beein­flussen.

    Installiert man Windows 10 durch einen expliziten Aufruf von setup.exe, dann kann man das Verhalten der Installations­routine über eine Reihe von Parametern steuern. Das ist immer dann der Fall, wenn man das Programm vom Installations­medium startet, entweder für ein In-Place-Update oder eine Wipe and Load, bei man ein bestehendes Windows durch ein (angepasstes) Image über­schreibt.

    Beim "nativen" Servicing von Windows 10 startet das Setup jedoch selbständig. Der Administrator hat hier scheinbar keine andere Steuerungs­möglichkeit, als die Upgrades über WSUS oder mittels GPO zurück­zuhalten. Dem ist aber nicht so. Eine relativ einfache Methode stellt setupconfig.ini dar, in die man die Parameter eintragen kann, die man sonst setup.exe auf der Kommandozeile übergibt.

    Konfigurationsdatei auf den PCs einrichten

    Diese Datei muss man vor dem Feature-Update in das Verzeichnis

    %systemdrive%\Users\Default\AppData\Local\Microsoft\Windows\WSUS\

    kopieren. In zentral verwalteten Umgebungen kann man für diesen Zweck die Group Policy Preferences nutzen. Nach erfolgtem Update löscht das Setup diese Datei, so dass man sie für das nächste Mal erneut anlegen muss.

    Die setupconfig.ini muss man vor dem Start des Feature-Updates in das Profil des Default-Users kopieren.

    Das ini-Format besteht bekanntlich aus Sektionen mit Überschriften in eckigen Klammern, die eigentlichen Einstellungen folgen dem Muster Name=Wert.

    Für setupconfig.ini benötigt man nur einen Header, nämlich

    [Setupconfig]

    Viele der von setup.exe unterstützten Parameter haben für Upgrades, die über WSUS oder Windows Update kommen, keine Bedeutung. Offensichtlich ist das etwa für die Angabe eines WDS-Servers, weil man bei diesem Verfahren den PC nicht über das Netz booten muss, oder für den Product Key, der ja erhalten bleibt.

    Schalter nicht für jedes Verfahren dokumentiert

    Allerdings dokumentiert Microsoft nicht im Detail, welche Schalter von setup.exe beim Einspielen eines Upgrades unterstützt werden bzw. eine Wirkung haben. So durchläuft ein Feature-Update zwar auch die OOBE-Phase, aber der Benutzer wird nicht mehr mit den Einstellungen für die Privat­sphäre oder Sicherheits­fragen für das Passwort behelligt. Daher bleibt

    ShowOOBE=Full

    folgenlos.

    Einige andere Optionen hingegen funktionieren auch in diesem Kontext. Sie geben dem Administrator zusätzliche Flexibilität und erhöhen die Chance, das Update erfolgreich anzuschließen oder Fehler leichter zu beseitigen.

    Warnungen bezüglich Kompatibilität ignorieren

    Dieser Aufgabe dient der Parameter

    Compat=IgnoreWarning

    Damit verhindert man, dass Windows 10 das Setup wegen möglicher Kompatibilitäts­warnungen vorzeitig beendet. Das OS ist hier oft sehr sensibel und stößt sich selbst an Kleinigkeiten, die den Erfolg des Vorgangs nicht gefährden.

    Mit dieser Einstellung lassen sich die notorischen Abbrüche wegen der angeblich nicht kompatiblen "Microsoft XPS Document Writer" und "Microsoft Print To PDF" verhindern. Beim Auftreten ernsthafter Inkompa­tibilitäten kommt man um ein Troubleshooting ohnehin nicht herum.

    Dynamische Updates verhindern

    Windows 10 nutzt dynamische Updates (DU), um das System vor dem eigentlichen Upgrade noch auf den neuesten Stand zu bringen und so die Chancen für eine erfolgreiche Installation der neuen Version zu verbessern.

    Dabei spielt Microsoft das letzte kumulative Update ein und aktualisiert problematische Treiber. Außerdem erneuern DUs den Servicing Stack inklusive setup.exe und sorgen dafür, dass installierte Features on Demand (FoD) und Language Packs erhalten bleiben.

    In WSUS sind DUs als eigene Produkte vorhanden und können für das Upgrade grundsätzlich auf diesem Weg bereitgestellt werden. Das Problem besteht bloß darin, dass Microsoft nach Windows 10 1803 aufgehört hat, dynamische Updates via WSUS auszuliefern.

    Seit Windows 10 1809 liefert Microsoft keine dynamischen Updates mehr über WSUS aus.

    Stattdessen holen sich neuere Versionen des Betriebs­systems die dynamischen Updates direkt von Windows Update. Das Daten­volumen kann sich dabei auf mehrere hundert MB pro PC belaufen.

    Verfügt ein Standort nur über eine langsame Internet-Anbindung, dann sollte man erwägen, dynamische Updates zu deaktivieren, um den ganzen Vorgang zu beschleunigen. Diesem Zweck dient der Eintrag:

    DynamicUpdate=Disable

    Dadurch erhöht sich jedoch das Risiko, dass ein Feature-Update misslingt. Außerdem wird man FoDs und Language Packs selbst nachinstallieren müssen.

    Der Grund für dieses Verhalten von Windows 10 besteht darin, dass die schon lange angekündigte Unified Update Platform auf halbem Weg stecken geblieben ist. Firmenkunden kommen aktuell noch nicht in ihren Genuss, müssen aber mit den Auswirkungen der Umstellung leben. Derzeit ist unklar, ob Windows 10 2004 diesen Zustand beendet.

    Höhere Priorität für den Update-Prozess

    Das Update läuft normaler­weise mit einer niedrigen Priorität im Hintergrund. Bei einem kurzen Zeitfenster für das Aktualisieren des Systems kann man den Vorgang beschleunigen, indem man ihm mehr Leistung zuteilt. Zuständig ist dafür der Eintrag

    Priority=Normal

    Einige Blog-Einträge empfehlen statt Normal sogar die Verwendung des Wertes High, dieser ist aber in Microsofts Übersicht der Setup-Schalter nicht dokumentiert.

    Script zum Ende des Updates ausführen

    Nach erfolgter Installation kann eine ganze Reihe von Aufräum- oder Nacharbeiten anstehen. Durch die automatische Ausführung eines Scripts, bevor sich der Benutzer wieder anmelden kann, erhält der Admin hier ein wirkungs­volles Instrument.

    In der setupconfig.ini trägt man ein solches Script folgendermaßen ein:

    PostOOBE=c:\test.cmd

    Ein populärer Anwendungsfall wäre das Entfernen nicht benötigter Store Apps. Bei neueren Versionen von Windows 10 kehren einmal beseitigte Apps nach dem Update zwar nicht mehr zurück, aber wenn man es in der Ver­gangenheit versäumt hat, bei diesen OS-Zugaben auszumisten, dann bietet sich hier die Gelegenheit dazu.

    Für diese Aufgabe benötigt man das Cmdlet Remove-AppxProvisionedPackage, aber das direkte Ausführen eines PowerShell-Scripts würde an der voreingestellten Execution Policy scheitern. Daher trägt man für PostOOBE, wie oben beschrieben, eine Batch-Datei ein und startet aus ihr den Aufruf von PowerShell:

    powershell.exe -ExecutionPolicy Bypass -File "C:\RemoveApps.ps1" -WindowStyle Hidden

    Um etwa Zune Video zu entfernen, könnte man dann in das Script RemoveApps.ps1 dieses Kommando einfügen:

    Remove-AppxProvisionedPackage -Online -PackageName `
    Microsoft.ZuneVideo_2019.19101.10711.0_neutral_~_8wekyb3d8bbwe

    Nach Abschluss der Installation zeigt sich, dass das PowerShell-Script die Zune Video App erfolgreich entfernt hat.

    Weitere Optionen

    Für setupconfig.ini stehen noch weitere Parameter zur Verfügung, die sich je nach Anforderung als nützlich erweisen. So kann man die Log-Dateien für eine zentrale Fehleranalyse mit CopyLogs auf ein Netz­laufwerk kopieren.

    Steuern kann man zudem das Verhalten der Laufwerks­ver­schlüsselung während des Updates über die Option BitLocker mit den möglichen Werten AlwaysSuspend, TryKeepActive und ForceKeepActive.

    Mit DiagnosticPrompt (Werte: Enable | Disable) legt man fest, ob während des Updates die Eingabe­aufforderung für das Troubleshooting mit Umschalten + F10 gestartet werden kann.

    Zusätzliche oder aktualisierte Treiber lassen sich mit Hilfe der Option InstallDrivers bereitstellen, wobei man hier ein Verzeichnis angibt, in dem sich die .inf-Dateien befinden.

    Protokolle auswerten

    Das Setup schreibt während des Updates unter c:\windows\panther nicht nur ein Error-Log (setuperr.log), sondern in setupact.log praktisch jeden einzelnen abgearbeiteten Schritt.

    Daher lässt sich anhand dieser Datei leicht herausfinden, ob die in der setupconfig.ini enthaltenen Parameter überhaupt berücksichtigt wurden. Dazu sucht man in der Log-Datei nach "Cmdline".

    Die Auswertung der Log-File zeigt, dass der Aufruf von setup.exe um die Parameter aus der ini-Datei ergänzt wurde.

    Während man den Erfolg eines PostOOBE-Scripts relativ einfach überprüfen kann, sind die Auswirkungen anderer Einstellungen nicht so ohne weiteres erkennbar. Beispielsweise sieht man während des Vorgangs nicht, ob dynamische Updates aus dem Internet geladen wurden.

    Die Log-Datei zeigt auch, dass die dynamischen Updates übersprungen wurden.

    Auch die Wirksamkeit von bestimmten Werten für den Parameter Priority lässt sich nicht unmittelbar erkennen. In diesen Fällen hilft ebenfalls ein Blick in die setupact.log. Hier könnte man etwa über die Zeitstempel ausrechnen, ob eine höhere Priorität das Update beschleunigt hat.

    Fazit

    Über die Datei setupconfig.ini kann man das Windows-Setup auch bei Feature-Updates steuern, wenn man diese über Windows Update oder WSUS bezieht. Sie stellt einige Optionen zur Verfügung, welche den Erfolg und die Dauer des Updates positiv beeinflussen können.

    Praktisch ist zudem die Möglichkeit, die Installation mit Hilfe eines Scripts nachzu­bearbeiten, bevor sich die User zum ersten Mal wieder anmelden.

    Keine Kommentare