Try   HackMD

Windows 10 Setup mit autounattend.xml

Bernhard Anreiter 27. Dezember 2017

Mit der autounattend.xml können Windows-Setups automatisiert werden.
Das Tool WSIM Windows System Image Manager aus dem Windows ADK hilft bei der Erstellung einer autounattend.xml.

Vorbereitung: Download der Tools (ADK, SIM, ISO)


1. Setup-Verzeichniss vorbereiten

Zuerst wird die Windows ISO-Datei auf die Festplatte kopiert z.B.:

C:\\Win10_Setup_01

2. Erstellen einer neuen autounattend.xml mit WSIM


Nach dem Start des WSIM muss die:

  • install.wim in C:\\Win10-Setup\\sources ausgewählt werden
  • um eine neue autounattend.xml zu erstellen.

Danach können im „Windows-Image“-Bereich die einzelnen „Components“, also Einstellungsmöglichkeiten, in die Antwortdatei hinzugefügt und im Eigenschaftsbereich (rechts) konfiguriert werden.

Fehlerhafte Einstellungen werden im Bereich „Meldungen“ angezeigt.


Weitere Infos: Microsoft.com – Windows System Image Manager User Interface

3. Entscheidung: Audit- oder OOBE-Mode?

A - Audit Mode

Bei einem Audit-Mode-Setup wird ein sogenanntes

Referenz-System installiert und angepasst (z.B. Programme installiert).

Danach wird das System mit:

  • sysprep /generalize generalisiert und
  • ein Image erstellt.

Dieses Image wird dann auf andere Computer wiederhergestellt.

Vorteil:
Ein fertig installiertes und konfiguriertes System kann schnell bereitgestellt werden.

Nachteil:
Installierte Programme/Treiber, gesetzte Einstellungen sind im Image verankert und müssen dort gepflegt werden.

B - Out of Box Experience (OOBE) Mode

Mit einem Out of Box Experience (OOBE) Setup wird bereits ein auslieferungsfähiges System installiert. Die restlichen Anpassungen (z.B.: Programme installieren) werden nach dem Windows Setup durchgeführt.

Vorteil: #
Programme etc. sind vom Windows Setup entkoppelt und können separat gepflegt werden (keine umfangreiche Imagepflege).

Nachteil:
Programme etc. müssen nach dem Setup via Silent-Setups, Scripts und/oder Gruppenrichtlinien angewendet werden (evtl. zeitintensiv).

Weitere Infos: Microsoft.com – Understanding Servicing Strategies


4. Vorarbeiten für Domain-Beitritt

Da das Domainbeitritt-Passwort unverschlüsselt in der Autounattend.xml stehen wird, sollte ein eigens dafür erstelltes, minimal berechtigtes Benutzerkonto verwendet werden.

Im Active Directory:

  1. Erstellen einer Gruppe ohne Berechtigungen
    • z.B. Gruppenname: Nix
  2. Das Benutzerkonto erstellen
    • z.B. Benutzername: domjoin
  3. Diesen Benutzer der Gruppe "Nix" hinzufügen
    • und als Hauptgruppe hinterlegen
  4. diesen Benutzer aus der Domain-Benutzer-Gruppe entfernen
  5. Das Eigenschaftsfenster der Domain öffnen
    • Sicherheit
  6. erstelltes Benutzerkonto hinzufügen
    - → Erweitert
  7. Berechtigung setzen:
    • „Computer“-Objekte erstellen

5.1. Autounattend.xml OOBE-Beispiele für BIOS/UEFI (schnell)

ACHTUNG: → Bestehende Partitionen werden gelöscht und neu erstellt!

  • Die folgenden Autounattend-Beispiel-Downloads enthalten schnell einsatzbereite, gezippte Autounattend.xml-Dateien für BIOS- bzw. UEFI-Systeme.
  • Diese enthalten die folgenden Einstellungen:
Spracheinstellungen Deutsch (Österreich)
Festplatten/Partitions-Konfiguration DiskID 0 wird verwendet und gelöscht (!)
  • Systempartitionen werden angelegt
  • Windows-Partition wird mit maximal möglicher Partitionsgröße erstellt
  • Windows 10 Pro wird installiert Windows-Key muss noch in „Key einfügen“ gesetzt werden!
    Windows-Benutzer erstellen mit lokalen Administrator-Rechten
    User: „admin“
    Passwort „admin“

    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
    das echte Administrator-Konto erhält kein Passwort und ist deaktiviert
    • Da theoretisch nur mit dem Windows Editor (Notepad) der entsprechende Windows-Key einfügt werden muss, sind diese Dateien fast sofort einsatzbereit!
    • Das Passwort des Admin-Benutzers sollte aber im Anschluss sofort geändert werden!

    SCHNELLSTART-TIPP:

    1. Mit dem Media Creation Tool einen bootfähigen Windows-Setup-USB-Stick erzeugen (min. USB 3.0 empfohlen!).
    2. Danach einfach die passende Autounattend auf den USB-Stick kopieren und auf Autounattend.xml umbenennen!

    5.2. Autounattend.xml OOBE-Beispiel (ausführlicher)

    Leider gestaltet sich der Einstieg trotz Windows System Image Manager etwas schwieriger und ist ohne weitere Doku nicht selbsterklärend.

    Das folgende Beispiel soll daher beim Erststart helfen und sollte zur weiteren Bearbeitung im Windows System Image Manager geöffnet werden.

    ACHTUNG: im Beispiel werden bestehende Partitionen gelöscht und neu erstellt!

    In jedem Fall zu prüfen/anzupassen sind:

    aktuell customized
    Windows-Version Windows 10 Pro Windows 10 Pro
    Organization Mustermann GmbH D.I.E. PROJEKT GmbH
    Domainjoin Credentials setzen
    MachineObjectOU anpassen
    Manufacturer Mustermann GmbH
    SupportPhone +43 (0) 000 / 00000
    Lokaler Administrator Passwort setzen <LocalAccounts>
    l0cal$iMpL3
    Automatische Windows-Anmeldung als Administrator
    <ComputerName></ComputerName> CLT-FJ-U759-00
    <ProductKey>
    Autounatended.xml Quellcode aufklappen
    <?xml version="1.0" encoding="utf-8"?>
    <unattend
    xmlns="urn:schemas-microsoft-com:unattend">
        <servicing></servicing>
        <settings pass="windowsPE">
            <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
     xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <SetupUILanguage>
                    <UILanguage>DE-DE</UILanguage>
                </SetupUILanguage>
                <InputLocale>0c07:00000407</InputLocale>
                <UILanguage>de-DE</UILanguage>
                <UILanguageFallback>de-DE</UILanguageFallback>
                <UserLocale>de-DE</UserLocale>
                <SystemLocale>de-DE</SystemLocale>
            </component>
            <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
     xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <DiskConfiguration>
                    <Disk wcm:action="add">
                        <CreatePartitions>
                            <CreatePartition wcm:action="add">
                                <Order>2</Order>
                                <Type>Primary</Type>
                                <Extend>true</Extend>
                            </CreatePartition>
                            <CreatePartition wcm:action="add">
                                <Order>1</Order>
                                <Size>500</Size>
                                <Type>Primary</Type>
                            </CreatePartition>
                        </CreatePartitions>
                        <ModifyPartitions>
                           <ModifyPartition wcm:action="add">
                                <Active>true</Active>
                                <Format>NTFS</Format>
                                <Label>System reserviert</Label>
                                <Order>1</Order>
                                <PartitionID>1</PartitionID>
                                <TypeID>0x27</TypeID>
                            </ModifyPartition>
                            <ModifyPartition wcm:action="add">
                                <Order>2</Order>
                                <Active>true</Active>
                                <Format>NTFS</Format>
                                <Label>System</Label>
                                <Letter>C</Letter>
                                <PartitionID>2</PartitionID>
                            </ModifyPartition>
                        </ModifyPartitions>
                        <DiskID>0</DiskID>
                        <WillWipeDisk>true</WillWipeDisk>
                    </Disk>
               </DiskConfiguration>
                <ImageInstall>
                    <OSImage>
                        <InstallTo>
                            <DiskID>0</DiskID>
                            <PartitionID>2</PartitionID>
                        </InstallTo>
                        <WillShowUI>OnError</WillShowUI>
                        <InstallFrom>
                            <MetaData wcm:action="add">
                                <Key>/image/name</Key>
                                <Value>Windows 10 Pro</Value>
                            </MetaData>
                        </InstallFrom>
                    </OSImage>
                </ImageInstall>
                <UserData>
                    <AcceptEula>true</AcceptEula>
                    <Organization>D.I.E. PROJEKT GmbH</Organization>
                    <ProductKey>
                        <Key>XXX-XXX-XXX-XXX-XXX</Key>
                        <WillShowUI>OnError</WillShowUI>
                    </ProductKey>
               </UserData>
           </component>
        </settings>
        <settings pass="specialize">
            <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
     xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <OEMInformation>
                    <Manufacturer>D.I.E. PROJEKT GmbH</Manufacturer>
                    <SupportURL></SupportURL>
                    <SupportPhone>(0)+49 351 47936 0</SupportPhone>
                    <HelpCustomized>false</HelpCustomized>
                </OEMInformation>
                <ComputerName>CLT-FJ-U759-00</ComputerName>
                <RegisteredOrganization>D.I.E. PROJEKT GmbH</RegisteredOrganization>
            </component>
            <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
     xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Identification>
                    <Credentials>
                        <Domain>DIEP-INGENIEURE.local</Domain>
                        <Password>$iMpL3</Password>
                        <Username>domainjoin</Username>
                    </Credentials>
                    <JoinDomain>DIEP-INGENIEURE</JoinDomain>
                    <MachineObjectOU>OU=Clients,DC=domainname,DC=local</MachineObjectOU>
                </Identification>
            </component>
        </settings>
        <settings pass="oobeSystem">
            <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" anguage="neutral" versionScope="nonSxS"
     xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <OOBE>
                    <HideEULAPage>true</HideEULAPage>
                    <HideLocalAccountScreen>true</HideLocalAccountScreen>
                    <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                    <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                    <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                    <ProtectYourPC>1</ProtectYourPC>
                </OOBE>
                <UserAccounts>
                    <LocalAccounts>
                        <LocalAccount wcm:action="add">
                            <Password>
                                <Value>l0cal$iMpL3</Value>
                                <PlainText>false</PlainText>
                            </Password>
                            <DisplayName>Administrator</DisplayName>
                            <Name>administrator</Name>
                            <Group>Administrators</Group>
                        </LocalAccount>
                    </LocalAccounts>
                    <AdministratorPassword>
                        <Value></Value>
                        <PlainText>false</PlainText>
                    </AdministratorPassword>
                </UserAccounts>
                <AutoLogon>
                    <Password>
                        <Value></Value>
                        <PlainText>false</PlainText>
                    </Password>
                    <Domain></Domain>
                    <Enabled>true</Enabled>
                    <Username>administrator</Username>
                </AutoLogon>
            </component>
            <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
     xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Reseal>
                    <Mode>OOBE</Mode>
                </Reseal>
            </component>
            <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
     xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <InputLocale>0c07:00000407</InputLocale>
                <SystemLocale>de-DE</SystemLocale>
                <UILanguage>de-DE</UILanguage>
                <UILanguageFallback>de-DE</UILanguageFallback>
                <UserLocale>de-DE</UserLocale>
            </component>
        </settings>
        <cpi:offlineImage cpi:source="wim:c:/win10-setup/sources/install.wim#Windows 10 Pro"
    
     xmlns:cpi="urn:schemas-microsoft-com:cpi" />
        </unattend>
    

    Weitere Infos: Microsoft.com – Unattended Windows Setup Reference

    6. Computernamen korrigieren

    Wenn kein Computername in der Autounattend.xml angegeben wird, generiert das Setup den Namen automatisch.

    Der Administrator sollte den Namen nach Abschluss des Setups entsprechend ändern.

    Andere Möglichkeiten, die den Umfang dieses Beitrags leider sprengen würden und in naher Zukunft daher eigene Beiträge erhalten werden:

    7. Windows Updates integrieren

    Um eine schnelle Windows-Bereitstellung zu ermöglichen, sollten die aktuell notwendigen/verfügbaren Updates gleich in die Installationsressource integriert werden.

    Dazu gehört auf jeden Fall:

    • das letzte kumulative Windows 10 Update
    • das letzte kumulative .NET Update

    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →
    beide im Microsoft Update Katalog
    (suche nach: Windows 10 1709 cumulative).

    ​​​​<!-- Windows Updates mit DISM integrieren -->
    ​​​​Dism /Mount-Wim /WimFile:C:\Win10-Setup\sources\install.wim /Name:"Windows 10 Pro" /MountDir:C:\Win10-Mount
    ​​​​Dism /Add-Package /PackagePath:C:\Win10-Updates\Windows10-KBxxxxxxx-x64.msu /Image:C:\Win10-Mount /LogPath:AddPackage.log
    ​​​​Dism /Unmount-Wim /MountDir:C:\Win10-Mount /Commit
    

    Weitere Infos:

    8. Treiber integrieren


    Die Treiber können in einem Verzeichnis gesammelt und gemeinsam integriert werden

    /Recurse/
    

    Treiber mit DISM integrieren

    ​​​​Dism /Mount-Wim /WimFile:C:\Win10-Setup\sources\install.wim /Name:"Windows 10 Pro" /MountDir:C:\Win10-Mount
    ​​​​Dism /Image:C:\Win10-Mount /Add-Driver /Driver:C:\Treiber /Recurse
    ​​​​Dism /Unmount-Wim /MountDir:C:\Win10-Mount /Commit
    

    Weitere Infos: Microsoft.com – Add and Remove Drivers to an Offline Windows Image

    9. Install.wim bereinigen

    Die Dateigröße der Install.wim wächst leider schnell an.
    Besonders wenn ein Kumulatives Windows Update integriert wird.
    Die Image-Datei sollte daher im Anschluss bereinigt und neu geschrieben werden.
    Wenn die neue Install.wim funktioniert, kann die alte Datei gelöscht werden.

    Install.wim bereinigen

    Dism /Mount-Wim /WimFile:C:\Win10-Setup\sources\install.wim /Name:"Windows 10 Pro" /MountDir:C:\Win10-Mount
    Dism /Image:C:\Win10-Mount /Cleanup-Image /StartComponentCleanup /ResetBase
    Dism /Unmount-Wim /MountDir:C:\Win10-Mount /Commit
    dism /Compress:max /Export-Image /SourceImageFile:C:\Win10-Setup\sources\install.wim /Name:"Windows 10 Pro" /DestinationImageFile:C:\Win10-Setup\sources\install_CLEAN.wim
    

    Weitere Infos: Microsoft.com – Reduce the Size of the Component Store…, Microsoft.com – DISM Image Management Command-Line Options

    10. WIN-Install mit Setupcomplete.cmd abschließen

    Nach einer automatisierten Windows-Installation sollen ggf. noch weitere automatische Anpassungen/Installationen im gestarteten Windows durchgeführt werden.

    • Ein solches Script muss als:
      • %WINDIR%\\Setup\\Scripts\\SetupComplete.cmd
      • in der install.wim gespeichert werden.

    Da nicht bei jeder kleinen Änderung eine Anpassung dieser Datei im Image notwendig sein sollte, empfiehlt sich:

    • die Auslagerung ins Netzwerk.
    • Die integrierte SetupComplete.cmd enthält z.B. nur Befehle zum Verbinden eines Netzlaufwerks
      • → z.B. net use S: \\\server\\freigabe$) oder einer Freigabe und holt das tatsächliche Script sowie dazugehörige Programme, Setupdateien von dort ab.
    • Im Anschluss wird der Computer neu gestartet (z.B. shutdown -r -f -t 0) und der Benutzer führt seine erste Anmeldung durch.

    → Image mounten

    Dism /Mount-Wim /WimFile:C:\Win10-Setup\sources\install.wim /Name:"Windows 10 Pro" /MountDir:C:\Win10-Mount
    

    → SetupCompplete.cmd erstellen

    C:\\Win10-Mount\\Windows\\Setup\\Scripts\\SetupComplete.cmd

    → Image unmounten

     Dism /Unmount-Wim /MountDir:C:\Win10-Mount /Commit
    

    Weitere Infos: Microsoft.com – Add a Custom Script to Windows Setup

    11. WIN autounattend ISO erzeugen

    • Die Autounattend.xml muss in diesem Beispiel in C:\\Win10-Setup gespeichert werden!
    • Im Anschluss wird mit Oscdimg schnell und einfach eine bootfähige und installierbare Windows-Setup-ISO-Datei erstellt.

    → Windows DVD ISO erzeugen

    Oscdimg –lAIO_OS -m -u2 –bC:\Win10-Setup\boot\etfsboot.com C:\Win10-Setup C:\Win10.iso
    Weitere Infos: [Microsoft.com – Oscdimg](https://docs.microsoft.com/de-de/windows-hardware/manufacture/desktop/oscdimg-command-line-options?redirectedfrom=MSDN)
    

    12. Die erzeugte ISO testen


    • Wenn alles funktioniert, sollte nur mehr ein Boot von der DVD notwendig sein.
    • Die sonst notwendigen, manuellen Setupeingaben sollten durch die Autounattend.xml abgedeckt sein.
    • Idealerweise testet man die neu erstellte Windows-Setup-DVD in einer virtuellen Umgebung (z.B. Hyper-V oder Virtualbox).