Rechnername in der autounattend.xml ändern

    Nachdem wir nun einen fertig aufgebauten Rechner inclusive der gewünschten Software haben - wiederum ohne einen unnötigen Tastendruck - stehen wir vor einem weiteren Problem: Warum treiben wir den ganzen Aufwand? Bestimmt nicht, um einen einzigen! Rechner zu installieren. Die Rechner sollen bzw. dürfen - vor allem in einer Domäne - natürlich nicht alle den selben Namen erhalten. Wir könnten natürlich - wie bereits erwähnt - den Rechnernamen in der Autounattend.xml einfach weglassen, dann würde ein zufälliger Name generiert. Ich möchte jedoch schon "meine" Rechner nach meiner eigenen Namenskonvention benennen.

    Wir müssen also den Rechnernamen in unserer Autounattend.xml austauschen. Ich habe es mir an dieser Stelle einfach gemacht und mir ein kleines Tool gesucht, welches Text in einer Datei sucht und durch einen anderen Text erstetzt. Davon gibt es jede Menge, mir geht es hier darum, es soll erstens klein sein und zweitens in ein Script eingebaut werden, also über Parameter gesteuert werden können. Ich habe ein DOS-Script bei

    http://www.dostips.com/?t=Batch.FindAndReplace

    gefunden und als replace.cmd im Scriptverzeichnis \\Servername\INSTALLFILES\cmd gespeichert.

    Quellcode:

    @echo off
    REM -- Prepare the Command Processor --
    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL DISABLEDELAYEDEXPANSION

    ::BatchSubstitude - parses a File line by line and replaces a substring"
    ::syntax: BatchSubstitude.bat OldStr NewStr File
    ::          OldStr [in] - string to be replaced
    ::          NewStr [in] - string to replace with
    ::          File   [in] - file to be parsed
    :$changed 20100115
    :$source http://www.dostips.com
    if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )


    Wem das Tool nicht gefällt, kann sich gerne etwas anderes suchen, es geht mir hier um das Prinzip. Der Tausch des Rechnernamens in der XML ist ja lediglich die Voraussetzung für unser eigentliches Ziel, die Masseninstallation von vielen Rechnern ohne Benutzereingriff.

    Wichtig ist, dass Euer Tool nicht (nur) über eine grafische Oberfläche verfügt, sondern über Parameter gesteuert werden kann, da wir es aus unserem Script heraus aufrufen wollen.

    Wir ändern nun unsere w7install.cmd. Bisher wird ja nur eine Sicherheitsabfrage getätigt (erst wenn man JA eintippt, geht es los). Da in der Abfrage sowieso etwas eingegeben werden muss, können wir in dieser Zeile ja auch gleich die Abfrage nach dem gewünschten Rechnernamen machen. Wir ersetzen also die Zeile

    set /P _reply=Tippen Sie JA (in GROSSBUCHSTABEN) wenn Sie wirklich fortfahren wollen:

    durch

    set /P _reply=Geben Sie den Rechnernamen ein oder 'quit', wenn Sie abbrechen wollen:

    Jetzt ersetzen wir die Zeile

    if %_reply%==JA goto :install

    durch

    if /I not %_reply%==quit goto :install

    Das "/I" sorgt dafür, dass "QUIT" immer erkannt wird, egal ob gross- oder kleingeschrieben.

    Jetzt haben wir also unseren Rechnernamen in der Variablen _reply. Damit kann man doch schonmal arbeiten.

    Ich gehe im Folgenden davon aus, dass der Rechnername in unserer zu ändernden XML-Datei TESTNAME ist. Um den Namen händisch zu ändern, muss man natürlich nicht die ganze XML-Datei neu generieren lassen, einfach mit einem Editor aufrufen und nach <Computername> suchen. Die Zeile lautet komplett

    <ComputerName>TESTNAME</ComputerName>

    Wir kopieren unsere Autounattend.xml aus dem W7PRO-Verzeichnis ins cmd-Verzeichnis. In unserem Script fügen wir unterhalb von

    echo Ok, dann geht's los

    ein wenig Code ein. Zunächst checken wir mal, ob noch eine Autounattend.xml im Installationsverzeichnis ist, z.B. von einer vorherigen Installation. Wenn ja, wird die erstmal gelöscht:

    if exist %_installpath%\Autounattend.xml del %_installpath%\Autounattend.xml

    Jetzt kommt unser kleines Replace-Script zum Einsatz. Damit auch eine Datei erzeugt wird, muss die Ausgabe in die gewünschte Datei umgeleitet werden.

    call replace.cmd TESTNAME %_reply% Autounattend.xml > %_installpath%\Autounattend.xml

    Jetzt läuft die Installation wie gewohnt und der Rechner bekommt den von uns eingegebenen Rechnernamen. Da die Standard-XML im Scriptverzeichnis nicht verändert wird, kann man nun beliebig viele Rechner mit von uns definierten Namen betanken. Das ist schonmal besser wie vorher.


    Warum sage ich "Es ist schon besser" und nicht "Jetzt ist es gut"?

    Wie gesagt, unser Ziel ist eine Masseninstallation. Was würde im Moment passieren, wenn wir zwei oder noch mehr Rechner gleichzeitig installieren würden? Mehrere Rechner starten das Script und versuchen, die Autounattend.xml im Installationsverzeichnis zu löschen und neu zu schreiben. Das Chaos ist vorprogrammiert.

    Um dieses Chaos zu vermeiden, müssen wir jedem Rechner, seine eigene XML zur Verfügung stellen. Wir benennen die Datei nach dem Schema RECHNERNAME.xml und starten das Windows-Setup mit dieser Datei. Den Rechnernamen haben wir bereits in der Variablen %_reply%, also nutzen wir das doch einfach und bauen das Script um:

    Zur besseren Verständlichkeit des Scripts ändern wir mal den Variablennamen von %_reply% in %_pcname%

    ...
    set /P _pcname=Geben Sie den Rechnernamen ein oder 'quit', wenn Sie abbrechen wollen:
    if /I not %_pcname%==quit goto :install
    ...

    echo Ok, dann geht's los

    :: Check, ob die Datei schon existiert und ggf. löschen

    if exist %_installpath%\%_pcname%.xml del
    %_installpath%\%_pcname%.xml


    :: neue Rechner-XML im Installationsverzeichnis generieren

    call replace.cmd TESTNAME %_pcname% Autounattend.xml > %_installpath%\%_pcname%.xml

    :: Wechseln ins Installationsverzeichnis und Start der Installation

    cd %_installpath%
    setup.exe /unattend:%_pcname%.xml


    So sieht's schon ganz gut aus, oder? Egal, wieviele Rechner jetzt loslaufen, jede Installation kopiert sich zunächst mal die Standard-XML und nur dort werden Änderungen vorgenommen. Was trennt uns nun noch von unserem Ziel, der vollständig automatisierten Massenbetankung? Die Eingabe des Rechnernamens. An jedem Rechner muss gewartet werden, bis WinPE gestartet ist und die Abfrage nach dem gewünschten Namen kommt.

    Im nächsten Artikel werde ich Euch zeigen, wie die Generierung des Rechnernamens automatisiert werden kann.

    Kommentar schreiben

    Sicherheitscode
    Aktualisieren

    © 2018 Exilschwaelmer. All Rights Reserved. Designed By JoomShaper
    Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
    Weitere Informationen Ok Ablehnen