Windows 10 X64 + X86 Setup-Antwortdateien erstellen

Ich habe nun schon einige Anleitungen zu dem Thema PXE-Boot erstellt, darunter war auch eine Anleitung, wie man von dort aus über Netzwerk, Windows installieren kann. An sich ist das schon sehr praktisch, wenn jeder Rechner im Netzwerk von diesem PXE-Server aus starten kann und darüber auch Betriebssysteme installiert werden können.

Heute möchte ich Ihnen daher die Verwendung von Antwortdateien näher bringen. Diese werden beispielsweise benötigt, wenn die Installation komplett unbeaufsichtigt vonstatten gehen soll. Es gibt hier allerlei Variationen und es bestünde auch die Möglichkeit, lediglich Teilbereiche zu automatisieren, die sich eigentlich nie besonders ändern.

Ein mögliches Szenario wären beispielsweise Privatkunden-, Geschäftskunden- und Eigene- Installationen. Sie könnten zwar die Sprache automatisiert setzen lassen und manch andere Dinge auch, nur ist es hier meiner Meinung nach nicht immer vorteilhaft automatisch Benutzer erstellen zu lassen. Da jeder Privatkunde auch so seine ganz eigenen Vorlieben hat, trägt man dies besser manuell ein. Wie das letztendlich jeder handhabt, muss ja jeder selber wissen. Ich zeige Euch daher ein paar allgemeingültige Beispiele.

Kleine Information am Anfang

Ich habe hier nur Windows 10 X64 Beispiele gemacht. Dessen bin ich mir bewusst! Sie können diese aber auch bei x86 Windows Versionen verwenden. Dazu müssen Sie immer nur das amd64 gegen x86 austauschen in den Dateien. Die Dokumentation und die möglichen Werte zu den einzelnen Parametern finden Sie bei den Microsoft Docs

Dem Windows-Setup die Antwortdatei mitgeben

Sie müssen das Setup nur mit einem zusätzlichen Parameter starten:

setup.exe /unattend:DATEINAME.EXTENSION

Beispiel:

setup.exe /unattend:Windows_10_X64_standard_autounattend.xml

Die Antwortdatei liegt dabei im selben Ordner, wie auch die Setup.exe.

Sollte der Pfad abweichen, dann wären folgende Varianten möglich (Die Änderungen sind in fettschrift):

setup.exe /unattend:V:\Windows_10_X64_standard_autounattend.xml
setup.exe /unattend:\\192.168.1.99\Ordner\Windows_10_X64_standard_autounattend.xml

Eine allgemein gehaltene Antwortdatei für Windows 10 X64

Einsatzmöglichkeit: Alle die sich nicht innerhalb einer Domain befinden und frei über Ihr System entscheiden wollen. Sie werden während dem Setup nach dem Installationsort, den Kontodaten und zu diversen Netzwerkeinstellungen gefragt. Der Rest ist automatisiert!

Beispieldatei: Windows_10_X64_standard_autounattend.xml

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <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>de-DE</InputLocale>
            <SystemLocale>de-DE</SystemLocale>
            <UILanguage>de-DE</UILanguage>
            <UserLocale>de-DE</UserLocale>
            <UILanguageFallback>en-US</UILanguageFallback>
        </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">
            <UserData>
                <AcceptEula>true</AcceptEula>
                <FullName></FullName>
                <Organization></Organization>
                <ProductKey>
                    <Key></Key>
                    <WillShowUI>Never</WillShowUI>
                </ProductKey>
            </UserData>
            <DynamicUpdate>
                <Enable>false</Enable>
                <WillShowUI>Never</WillShowUI>
            </DynamicUpdate>
            <EnableFirewall>false</EnableFirewall>
            <LogPath>C:\Log</LogPath>
        </component>
    </settings>
    <settings pass="specialize">
        <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>de-DE</InputLocale>
            <SystemLocale>de-DE</SystemLocale>
            <UILanguage>de-DE</UILanguage>
            <UILanguageFallback>en-US</UILanguageFallback>
            <UserLocale>de-DE</UserLocale>
        </component>
        <component name="Microsoft-Windows-Security-SPP-UX" 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">
            <SkipAutoActivation>true</SkipAutoActivation>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <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">
             <OOBE>
                <HideEULAPage>true</HideEULAPage>
				<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <NetworkLocation>Home</NetworkLocation>
                <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                <ProtectYourPC>3</ProtectYourPC>
            </OOBE>
            <TimeZone>Central European Standard Time</TimeZone>
        </component>
    </settings>
    <settings pass="generalize">
        <component name="Microsoft-Windows-Security-SPP" 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">
            <SkipRearm>1</SkipRearm>
        </component>
    </settings>
</unattend>

Viele dieser einzelnen Unterpunkte können Sie auch verstehen, ohne jemals etwas davon gehört zu haben, da einige davon einfach selbsterklärend sind.

In diesem Beispiel wird die Eingabe des Produkt-Keys übersprungen und auch nicht versucht diesen zu validieren. Es kann unter Umständen nämlich trotz richtigen Produkt-Keys passieren, dass dieser als fehlerhaft erkannt wird. Bei Privat-Kunden reicht es im Nachhinein diesen einfach unter Windows selbst zu aktivieren. Sie dürfen es nur nicht vergessen! Da Sie aber so einige Einstellungen unter Windows 10 ohne einen gültigen Produkt-Key erst gar nicht ändern dürften, sollte das ziemlich schnell auffallen.

Veraltete Einträge in dieser Datei:

<NetworkLocation>Home</NetworkLocation>

Mögliche Werte: Home, Work und Other

Ich schreibe dies extra dabei, damit Sie sich schon einmal darauf einstellen können, dass diese bald nicht mehr funktionieren werden! Microsoft selbst hat diese als veraltet gebrandmarkt, was soviel bedeutet wie, dass diese bald komplett entfernt werden oder bereits jetzt schon nicht mehr funktionieren.

Eine personenspezifische Antwortdatei für Windows 10 X64

Einsatzmöglichkeit: Personenspezifische Rechner, die sich nicht innerhalb einer Domain befinden und frei über Ihr System entscheiden wollen. Sie werden nur nach dem Installationsort gefragt! Der Rest ist automatisiert! Wann ist das sinnvoll? Beispielsweise für einen selbst. Wenn Sie selbst Windows installieren wollen, dann wissen sie ja auch, wie sie Ihr Windows gerne haben möchten. Da auch der normale Nutzer äußerst Faul beim installieren ist, will man sich nicht immer durch die langweiligen Dialoge klicken müssen. Privat verwende ich eine ähnliche. Die Login-Daten sind frei erfunden, also versuchen Sie es gar nicht erst 😛

Beispieldatei: Windows_10_X64_DarthVader_autounattend.xml

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <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>de-DE</InputLocale>
            <SystemLocale>de-DE</SystemLocale>
            <UILanguage>de-DE</UILanguage>
            <UserLocale>de-DE</UserLocale>
            <UILanguageFallback>en-US</UILanguageFallback>
        </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">
            <UserData>
                <AcceptEula>true</AcceptEula>
                <FullName></FullName>
                <Organization></Organization>
                <ProductKey>
                    <Key></Key>
                    <WillShowUI>Never</WillShowUI>
                </ProductKey>
            </UserData>
            <DynamicUpdate>
                <Enable>false</Enable>
                <WillShowUI>Never</WillShowUI>
            </DynamicUpdate>
            <EnableFirewall>false</EnableFirewall>
            <LogPath>C:\Log</LogPath>
        </component>
    </settings>
    <settings pass="specialize">
        <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>de-DE</InputLocale>
            <SystemLocale>de-DE</SystemLocale>
            <UILanguage>de-DE</UILanguage>
            <UILanguageFallback>en-US</UILanguageFallback>
            <UserLocale>de-DE</UserLocale>
        </component>
        <component name="Microsoft-Windows-Security-SPP-UX" 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">
            <SkipAutoActivation>true</SkipAutoActivation>
        </component>
        <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">
            <ComputerName>DarthVader-PC</ComputerName>
        </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>
                <JoinWorkgroup>SIDIOUS-NETWORK</JoinWorkgroup>
            </Identification>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <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">
            <UserAccounts>
                <AdministratorPassword>
                    <Value>IchbindeinVater</Value>
                    <PlainText>true</PlainText>
                </AdministratorPassword>
                <LocalAccounts>
                    <LocalAccount wcm:action="add">
                        <Password>
                            <Value>IchbindeinVater</Value>
                            <PlainText>true</PlainText>
                        </Password>
                        <Group>administrators</Group>
                        <Name>DarthVader</Name>
                        <DisplayName>Darth Vader</DisplayName>
                        <Description>Die dunkle Seite der Macht hahaha</Description>
                    </LocalAccount>
                </LocalAccounts>
            </UserAccounts>
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <HideLocalAccountScreen>false</HideLocalAccountScreen>
                <NetworkLocation>Home</NetworkLocation>
                <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                <ProtectYourPC>3</ProtectYourPC>
                <SkipMachineOOBE>true</SkipMachineOOBE>
                <SkipUserOOBE>true</SkipUserOOBE>
            </OOBE>
            <TimeZone>Central European Standard Time</TimeZone>
        </component>
    </settings>
    <settings pass="generalize">
        <component name="Microsoft-Windows-Security-SPP" 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">
            <SkipRearm>1</SkipRearm>
        </component>
    </settings>
</unattend>

Wie sie vielleicht schon bemerkt haben sind hier folgende Dinge anders:

            <UserAccounts>
                <AdministratorPassword>
                    <Value>IchbindeinVater</Value>
                    <PlainText>true</PlainText>
                </AdministratorPassword>
                <LocalAccounts>
                    <LocalAccount wcm:action="add">
                        <Password>
                            <Value>IchbindeinVater</Value>
                            <PlainText>true</PlainText>
                        </Password>
                        <Group>administrators</Group>
                        <Name>DarthVader</Name>
                        <DisplayName>Darth Vader</DisplayName>
                        <Description>Die dunkle Seite der Macht hahaha</Description>
                    </LocalAccount>
                </LocalAccounts>
            </UserAccounts>

Hier legen wir einen Benutzer an!

Gruppe: Administrator
Kontoname: DarthVader
Angezeigter Name: Darth Vader
Beschreibung: Die dunkle Seite der Macht hahaha

Wenn Sie mehrere Nutzer haben möchten, kopieren Sie einfach den kompletten Bereich und fügen sie diesen unter dem bestehenden ein.

                    <LocalAccount wcm:action="add">
                        ........
                    </LocalAccount>

Außerdem sind noch folgende Werte zur Individualisierung angegeben:

<ComputerName>DarthVader-PC</ComputerName>
<JoinWorkgroup>SIDIOUS-NETWORK</JoinWorkgroup>

Computername: DarthVader-PC (MAXIMAL 15 Zeichen! Alles darüber kann in Problemen enden)
Arbeitsgruppe: SIDIOUS-NETWORK (Standard ist WORKGROUP)

Sie können die Arbeitsgruppe auch klein schreiben, nur rate ich Ihnen davon ab. Windows selbst schreibt in der Konfigurationsmaske alles groß! Egal was Sie da eingeben! Ob das irgendwelche Konsequenzen nach sich ziehen würde, wenn man das mischen würde, weiß ich nicht.

Veraltete Einträge in dieser Datei:

<NetworkLocation>Home</NetworkLocation>

Mögliche Werte: Home, Work und Other

                <SkipMachineOOBE>true</SkipMachineOOBE>
                <SkipUserOOBE>true</SkipUserOOBE>

Mögliche Werte: Bool, true oder false

Hiermit ist der Willkommensbildschirm gemeint. Trotz, das diese veraltet sind, sind diese immer noch nötig, um in dem aktuellen Windows 1803 Build ALLES zu automatisieren!

In Bearbeitung…

Zum Anfang!

11 Antworten auf „Windows 10 X64 + X86 Setup-Antwortdateien erstellen“

  1. Moin Danke für diese gute Info,

    wenn ich nun aber ein Image customized habe, dort unter andrem auch 1 Nutzer Admin, 1 Nutzer Hauptbenutzer & 1 Nutzer Networkoperator, wie bekomme ich es da hin, dass nun ohne das Ganze Thema oobe mit einem der Nutzer starte und ich nur noch das PW angeben muss?
    Oder alternativ mit einem Nutzer mit PW starte, dieses aber nur für den ersten start, der aber in Zukunft ein festgelegtes PW aus dem Image nutzt.

    1. Ich kann Ihnen das selber nicht genau sagen, denn dieser Bereich entzieht sich meinen Erfahrungswerten. Ich würde allerdings erst einmal probieren das komplette Passwortfeld bei dem User zu entfernen.

                  <Password>
                      <Value>IchbindeinVater</Value>
                      <PlainText>true</PlainText>
                  </Password>
      

      Dadurch müssten Sie in der Lage sein einen bereits durch das Image existierenden Nutzer auszuwählen und lediglich nur noch ein Passwort zu vergeben. Denn ein simples leer lassen des Passwortfeldes führt lediglich dazu, dass das Passwort nicht abgefragt wird aus der Erinnerung heraus, es wird aber nicht nach einem neuen Passwort gefragt.

      Das hier funktioniert demnach nicht:

                  <Password>
                      <Value></Value>
                      <PlainText>true</PlainText>
                  </Password>
      

      Sollte das nicht zum Erfolg führen rate ich Ihnen diesbezüglich Microsoft selbst zu fragen oder sich deren Dokumentationen anzusehen.

  2. Danke für die schnelle Rückmeldung, werde es mal ausprobieren. PW könnte ich sogar eingeben. Geht in wesentlich darum, dass „kein neuer User“ angelegt wird und ein bestehender genommen wird.
    Blöde Frage auf die Schnelle. Wo speichere ich die unattended.xml am besten, damit sie beim Start des Image ausgeführt wird.
    Wie gesagt es ist ein Image das nach Sysprep /generalize /oobe das auf einen Rechner aufgespielt wird und dann gestartet wird.
    Reicht es die Datei in den Ordner c:\windows abzulegen?
    In den Beschreibungen finde ich immer nur das Thema bootstick, den nutze ich hier aber nicht.

    1. Wo sie diese speichern ist eigentlich egal. Die könnte sowohl auf dem Rechner selbst liegen oder auf einem Netzlaufwerk.

      Was passiert denn, wenn Sie versuchen einen bereits existierenden Nutzer zu erstellen? Nach meinem Verständnis dürfte das gar nicht gehen, denn Doppelaccounts sind unmöglich. Ich habe das gerade extra nochmal getestet. Wenn Ihr Image also verteilt/installiert wird, müsste doch spätestens beim Erstellen der Nutzer eine Meldung kommen, dass dieser bereits existiert oder nicht? Wenn bereits Benutzer durch Ihr Image erstellt werden erübrigt sich doch auch die “Benutzer hinzufügen” Option in der Antwortdatei. Sie haben ja bereits Benutzer im Image selbst angelegt und brauchen das somit nicht mehr zu machen. Demzufolge müssten diese auch beim Installationsprozess erkannt werden und zur Auswahl stehen. Oder nicht? 🙂

  3. Das ist halt die Frage, wie verhält sich hier Windows bei der oobe Installation. Wenn im Image schon User vorhanden sind.
    A) die user stehen im Installationsprogramm zur Auswahl
    B) es muss ein installionsadmin erstellt werden, der im Nachgang per Script gelöscht wird.

  4. Hallo,
    wie erstelle ich eine Antwortdatei für Geräte, die sich in einer Domäne befinden. Über WDS.
    Ich erhalte trotz Einstellungen immer noch Abfragen beim ausführen.

    Vielen Dank

  5. Vielen Dank für diesen tollen Artikel. Für die Servereditionen kann ich auch
    supereinfach ISOs erstellen. Weniger Glück hab ich allerdings (noch) für
    Windows 10. Bei diesem [1] autounattend.xml weiss ich nicht, wie ich folgende
    Angaben automatisieren kann:

    -Region
    -Keyboard layout
    -In der gleichen Maske:
    -Online speech recognition
    -Location
    -Find my device
    -Diagnostic data
    -Inking & typing
    -Tailored experiences
    -Advertinsing ID

    Ist es ausserdem möglich, den eingebauten “Administrator”-Account zu
    aktivieren? Ich benutze den schon auf den Servereditionen, um (per Ansible)
    eingeschränkte Accounts einzurichten und möchte auf Desktops keine Ausname
    machen.

    Vielen Dank!

    [1] https://pastebin.pl/view/f4b3cd39

  6. Hallo,
    sowas habe ich gesucht! Dazu einige Fragen: Kann ich damit auch gestalten, also zB Background:User:color.
    Backgroud Admin:Image path:….
    Taskleiste Microsoft-symbols:disable usw?

    Und zum Verständnis: Ich habe einen Nagelneuen Rechner, der ist ja meistens Vorinstalliert. Da kann ich dann nen Win10-Stick einstelcken Dann zB E:\setup.exe /unattend:c:\User\PeterPan\Dokuments\DATEINAME.EXTENSION starten? Die Idee wäre, dass man sich ein kleines Progrämmchen schreibt, welches die Eckdaten abfragt (Kundenname, PCname,..) , die xml generiert und danach setup.exe … ausführt.

    1. Das wäre so denkbar. Wo die unattend.xml liegt ist egal, sie muss aber erreichbar für das Setup sein.

      Zu dem Rest kann ich dir leider nicht helfen. Selbst noch nie ausprobiert. Rein theoretisch müsste das aber gehen. Wenn nicht direkt über die unattend.xml, dann über eine Scriptdatei, die diese Dinge halt nachträglich abändert über spezielle Befehle:

      https://docs.microsoft.com/de-de/windows-hardware/manufacture/desktop/add-a-custom-script-to-windows-setup

      In diesem Script dann einfach die Befehle absetzen, um das Windows anzupassen. Wäre wohl die bequemste Art das zu regeln, zumal ich denke, dass man vieles in der unattend auch nicht machen kann, da es nicht für alles einen Eintrag gibt.

  7. Guten Tag,

    haben sie vielleicht auch noch eine Anleitung wie ich den Kompletten Prozess sauber abwickeln kann?

    Unattend.xml einfach mit dem Setup aufrufen geht ja nicht mehr da in Sourcen Ordner eine .esd und keine .wim enthalten ist

    1. Ich verstehe das Problem nicht. Ob WIM oder ESD ist unerheblich. Der Setup.exe ist es egal, ob nun eine WIM oder ESD Datei im Ordner liegt. Einfach wie gehabt der setup.exe das Anhängsel mitgeben und es läuft.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert