Automatisierter Massenrollout

    Ich stelle noch einmal das Szenario vor, um das es mir bei einem Massenrollout geht:

    Wir sind in einer Firma, die ihre Hardware regeneriert. Im Zuge dieses Hardwaretauschs soll gleichzeitig auf Windows 7 migriert werden. Beim Austausch soll so wenig Fachpersonal wie möglich gebunden und die Ausfallzeiten sollen so gering wie möglich gehalten werden. Daher soll folgendes funktionieren:

    Es kommt irgenwann morgens ein LKW angefahren, der die ganze neue Hardware bringt. Durch Hilfspersonal wird die Lieferung in die einzelnen Büros gebracht, gegen die alte Hardware getauscht und alles wird angeschlossen. Der Rechner wird gestartet und die Installation beginnt vollautomatisch ohne weiteren Benutzereingriff.

    Weitere Forderungen:
    Alle Rechner sollen Rechnernamen erhalten, die den Konventionen der Firma entsprechen, z.B. PC000001, PC000002, PC000003 usw.
    Wenn ein bereits installierter Rechner Probleme bereitet und erneut installiert werden soll, muss sichergestellt werden, dass er den selben Namen wie vorher erhält. Auch diese Neuinstallation soll ohne Benutzereingriff vonstatten gehen.

    Um diese Forderungen zu realisieren, müssen wir zunächst ein paar Überlegungen anstellen:

    Woher bekommt ein Rechner seinen Namen?
    Wie wird festgestellt, ob ein Rechner schon einmal installiert wurde?
    Wie wird der Rechnername festgestellt, den ein Rechner bei Neuinstallation vorher hatte?

    Woher bekommt ein Rechner seinen Namen?
    Wir erstellen uns eine einfache Liste mit den Rechnernamen. Aus dieser Liste fischen sich die Rechner einen Namen und löschen ihn aus dieser Liste, damit er nicht nochmals verwendet wird.

    Wie wird festgestellt, ob ein Rechner schon einmal installiert wurde?
    Das einzige Identifizierungsmerkmal, das wir in diesem Szenario haben, ist die Hardwareadresse der Netzwerkkarte, die MAC-Adresse. Also werden wir die zur Identifikation benutzen.

    Wie wird der Rechnername festgestellt, den ein Rechner bei Neuinstallation vorher hatte?
    Es muss eine zweite Liste generiert werden, die den Rechnernamen mit der MAC-Adresse referenziert.

    Zur Vorbereitung erstellen wir uns eine einfache Textdatei, in der alle gewünschten Rechnernamen untereinander stehen. Ich bleibe bei der obigen Namenskonvention:

    PC000001
    PC000002
    PC000003
    PC000004
    ...
    PC000100

    Die Liste wird unter dem Namen free.txt im Scriptordner 'cmd' abgespeichert.

    Jetzt bauen wir unser neues Installationsscript. Basis ist unser jetziges w7install.cmd. Ich baue es hier nochmal neu auf. Alle Änderungen und Erläuterungen schreibe ich als Kommentare in das Script rein, hier zusätzlich fett und in blau!

    @echo off
    :: Variablen definieren
    for /F %%i in ('chdir') do set _mypath=%%i
    set _installpath=..\W7PRO

    :: Hier kommen noch ein paar weitere Variablen für den Massenrollout

    set _free=free.txt
    set _free2=free2.txt
    set _used=used.txt
    set _dummy=TESTNAME
    set _xml=Autounattend.txt
    set _mac=
    set _pcname=

    cls
    echo ##############################################################
    echo #            Installation Windows 7 Professional             #
    echo #                                                            #
    echo #                Automatische Installation                   #
    echo #                                                            #
    echo #      ALLE Daten auf der Festplatte werden GELOESCHT!!!     #
    echo #                                                            #
    echo #                                                            #
    echo # www.exilschwaelmer.de                                      #
    echo ##############################################################
    echo.
    echo.
    echo.

    :: Die Abfrage nach dem Rechnernamen schmeissen wir raus! Statt dessen
    :: bauen wir eine kleine Verzögerungsschleife ein, damit wir noch ein
    :: paar Sekunden Zeit haben, ggf. die Betankung abzubrechen.
    :: Achtung: Der Windows-eigene Sleep-Befehl funktioniert NICHT in
    :: Windows PE! Entweder aus dem RecourceKit besorgen, weglassen oder
    :: umbauen.

    set /a _timer=30

    :schleife
    echo Noch %_timer% Sekunden bis zum Start. Strg-C zum Abbrechen...
    sleep 5
    set /a _timer=%_timer%-5
    if not %_timer%==0 goto :schleife

    echo Installation startet

    :: Als Erstes prüfen wir, ob unsere MAC-Liste mit den schonmal installierten
    :: Rechnern schon existiert. Wenn nicht, legen wir sie mit einem Dummy-
    :: Eintrag an, da die Liste ja im weiteren Verlauf gecheckt wird und
    :: vorhanden sein muss!

    if not exist %_used% echo PC000000 00-00-00-00-00-00 > %_used%

    :: Nun muss die MAC-Adresse des Rechners ermittelt werden. Wir extrahieren sie
    :: aus dem Befehl 'ipconfig /all' wie folgt:

    for /F "tokens=1-3 delims=.: " %%i in ('ipconfig /all') do if %%i==Physikalische set _mac=%%k

    :: Jetzt ist der Rechner identifiziert und wir prüfen, ob er schon einmal betankt wurde.
    :: Wenn ja, steht er in der MAC-Liste (wie er da reinkommt, steht weiter unten).

    for /F "tokens=1-2" %%i in (%_used%) do if %%j==%_mac% set _pcname=%%i

    :: Wenn der Rechner in der Liste gefunden wurde, ist die Variable %_pcname% jetzt belegt.
    :: Wenn nicht, ist sie leer, also nicht definiert. Wenn sie definiert ist, springen wir
    :: ein Eckcken weiter nach unten (Sprungmarke :name_ok)

    if defined _pcname goto :name_ok

    :: Wenn nicht, fischen wir einen Rechnernamen aus unserer Liste der noch nicht vergebenen
    :: Namen raus. Erläuterung der nachfolgenden for-Schleife:
    :: Beim ersten Durchlauf der Schleife ist die Variable %_pcname% noch nicht definiert (sonst
    :: wären wir ja gar nicht hier angelangt). Daher wird der erste Eintrag aus unserer Liste
    :: genommen und in die Variable geschrieben. Ab dem 2. Durchlauf IST die Variable belegt.
    :: Alle folgenden Zeilen (Rechnernamen) werden nun in eine neue Datei geschrieben. Vorher
    :: checken wir sicherheitshalber, ob diese Hilfsdatei existiert und löschen ggf.

    if exist %_free2% del %_free2%

    for /F %%i in (%_free%) do if not defined _pcname (set _pcname=%%i) else (echo %%i >> %_free2%)

    :: Jetzt haben wir also einen Namen und die dazugehörige MAC und tragen beides erstmal in
    :: unsere MAC-Liste ein:

    echo %_pcname% %_mac% >> %_used%

    :: Alle JETZT noch freien Rechnernamen stehen ja nun in unserer Hilfsliste. Wir löschen nun
    :: die "alte" Rechnerliste und benennen unsere Hilfsliste um:

    del %_free%
    ren %_free2% %_free%

    :: An dieser Stelle haben wir nun auf jeden Fall einen Rechnernamen in der Variablen %_pcname%,
    :: egal, ob schonmal installiert oder nicht. Daher kommt hier unsere Sprungmarke hin:

    :name_ok

    :: Nun erstellen wir uns unsere rechner.xml. Vorher prüfen wir, ob eine Datei mit diesem Namen
    :: schon im Installationsverzeichnis existiert und löschen sie ggf. raus:

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

    :: Jetzt unser Search & Replace-Tool:

    call replace.cmd %_dummy% %_pcname% %_xml% > %_installpath%\%_pcname%.xml

    :: Jetzt wechseln wir in das Installationsverzeichnis und schieben die Installation an.
    :: Das war's!

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

    Um das Script zu testen, ohne jedesmal einen Rechner via PXE booten und installieren zu müssen, könnt ihr die letzten beiden Zeilen auskommentieren. Dann kann das Script auch auf einem laufenden Rechner direkt aus dem Scriptverzeichnis aufgerufen werden.
    Zum Test, ob beim erneuten Start der gleiche Rechnername gewählt wird, einfach zwei Mal starten. Um zu testen, ob verschiedene Rechner verschiedene Namen bekommen, ändert Ihr in der used.txt einfach die MAC in einen beliebigen anderen Wert.
    Ob es funktioniert, seht Ihr dann anhand der beiden Dateien free.txt und used.txt.

    Zum Schluß noch ein gut gemeinter Rat von mir:
    Die Fragen - speziell zu dieser Massenbetankung - die in der letzten Zeit an mich gestellt und auch gern beantwortet wurden (und auch weiterhin gern beantwortet werden) haben mir gezeigt, dass dieses Szenario gern von Praktikanten oder Auszubildenden als Projekt genommen werden. Das freut mich sehr. Es gilt jedoch zu beachten, dass bei der Vorstellung eines Projekts auch Fragen gestellt werden. Ihr solltet daher nicht nur abtippen, sondern auch verstehen, wie es funktioniert und weitergehende Recherchen im Internet bzgl. der Unattended-Installation anstellen. Wenn Ihr in Scriptprogrammierung / DOS nicht unbedingt fit seid, fallt Ihr bei Nachfragen bei diesem Masseninstallationsscript um, ihr müsst die Befehle, die genutzt werden, schon verstehen. Evtl. setzt Ihr Euer Ziel ein wenig niedriger.

    Für diejenigen, die es in einem produktiven Umfeld einsetzen wollen: Bitte. gern geschehen. Schmückt Euch nur nicht mit fremden Federn sondern sagt einfach, wo Ihr die Sache her habt. Vor allem: Erstmal eine Testumgebung aufbauen, aber das sollte sich ja von selbst verstehen.

    Wenn Ihr Tippfehler - besonders im Script - findet, sagt Bescheid, damit ich das berichtigen kann, ich habe es nicht kopiert sondern neu getippt, da können Fipptehler schon mal vorkommen Zwinkernd

    Nochmals viel Erfolg beim Nachkochen!

    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