Vorbereiten eines Schulungsraumes mittels Batch Dateien
Will man einen Schulungsraum vorbereiten, der mit 10 - 20 PCs ausgestattet ist, kann es durchaus nervig werden, wenn man jeden einzelnen von Hand starten, benötigte Dateien kopieren und danach herunterfahren muss. Ebenso ist es, wenn man nach einer Schulung kleinere Übungs-Dateien o.ä. wieder von jedem einzelnen Rechner löschen muss.
Für diese Zwecke sind nachfolgende Batch-Files gedacht.
Anforderungen:
- Auch der evtl. (PC-)fremde Referent einer Schulung soll damit umgehen können
- es sollen möglichst nur Bordmittel verwendet werden
Voraussetzungen:
- Die Rechner und Netzwerkkarten müssen Wake-On-Lan können.
- das Programm wol.exe (zur Steuerung Wake-On-Lan)
- auf allen Schulungsrechnern existiert das Verzeichnis C:\Schulungsdaten
- Alle unten genannten Dateien sind im selben Verzeichnis, hier: C:\Schulungsraum
Bestandteile
Allgemeine Files:
- Allgemeine_Einstellungen.bat --> Hier werden z.B. Variablen für Umlaute und die Farben bestimmt
- Computernamen_Schulungsraum.txt --> eine Liste in der die Namen aller Schulungsrechner aufgeführt ist
- Mac-Adressen_Schulungsraum.txt --> wie oben, nur eben mit allen Mac-Adressen
- variablen.ini --> da mehrere Batch-Dateien die selben Variablen brauchen, hab ich mir die einfach in eine zentrale Datei geschrieben
- wol.exe --> Zum "aufwecken" der PCs (muss heruntergeladen werden)
Die "Anwendungen":
- Schulungsrechner_Erreichbarkeit_pruefen.bat --> Pingt die Rechner nacheinander an und zeigt dies dem Benutzer an
- Schulungsrechner_herunterfahren.bat --> Klar, um die Rechner alle nach der Schulung wieder herunterzufahren (falls es doch mal einer nicht gemacht hat )
- Schulungsrechner_starten.bat --> das Gegenstück zu oben - alle gleichzeitig starten
- Schulungsrechner_Daten_kopieren.bat
So, jetzt aber zum Quelltext:
Allgemeine_Einstellungen.bat
Variablen.ini
Hier stehen wirklich nur die Variablen drin, also alles was nach dem set-Befehl kommt.
Hier dürfen auch keine REMs oder ECHOs drin sein, weil jede Zeile in einer Schleife aufgerufen wird
Computernamen_Schulungsraum.txt
Mac-Adressen_Schulungsraum.txt
Hier unbedingt darauf achten dass die Adressen ohne Trennzeichen sind
Schulungsraum_Erreichbarkeit_pruefen.bat
Schulungsrechner_herunterfahren.bat
Schulungsrechner_starten.bat
zu guter letzt
Schulungsrechnern_Daten_kopieren.bat
Wir wollen ja auch Daten für die Schüler bereitstellen. Dafür gibt es einen speziellen Ordner in den der Referent seine Dateien legt und diese dann mit folgender Batch aus alle Schulungsrechner kopiert. Ich gehe hier von kleineren Übungsdateien für Excel oder Word aus, nicht von komplexen Installationsdateien die an spezielle Stellen geschoben werden müssen:
So, das war einiges in vielen Dateien und mit vielen Variablen. Ich hoffe es ist dennoch ausreichend erklärt und hilft vielleicht (auch nur in Auszügen) dem einen oder anderen mal was.
Gruß
Larz
Für diese Zwecke sind nachfolgende Batch-Files gedacht.
Anforderungen:
- Auch der evtl. (PC-)fremde Referent einer Schulung soll damit umgehen können
- es sollen möglichst nur Bordmittel verwendet werden
Voraussetzungen:
- Die Rechner und Netzwerkkarten müssen Wake-On-Lan können.
- das Programm wol.exe (zur Steuerung Wake-On-Lan)
- auf allen Schulungsrechnern existiert das Verzeichnis C:\Schulungsdaten
- Alle unten genannten Dateien sind im selben Verzeichnis, hier: C:\Schulungsraum
Bestandteile
Allgemeine Files:
- Allgemeine_Einstellungen.bat --> Hier werden z.B. Variablen für Umlaute und die Farben bestimmt
- Computernamen_Schulungsraum.txt --> eine Liste in der die Namen aller Schulungsrechner aufgeführt ist
- Mac-Adressen_Schulungsraum.txt --> wie oben, nur eben mit allen Mac-Adressen
- variablen.ini --> da mehrere Batch-Dateien die selben Variablen brauchen, hab ich mir die einfach in eine zentrale Datei geschrieben
- wol.exe --> Zum "aufwecken" der PCs (muss heruntergeladen werden)
Die "Anwendungen":
- Schulungsrechner_Erreichbarkeit_pruefen.bat --> Pingt die Rechner nacheinander an und zeigt dies dem Benutzer an
- Schulungsrechner_herunterfahren.bat --> Klar, um die Rechner alle nach der Schulung wieder herunterzufahren (falls es doch mal einer nicht gemacht hat )
- Schulungsrechner_starten.bat --> das Gegenstück zu oben - alle gleichzeitig starten
- Schulungsrechner_Daten_kopieren.bat
So, jetzt aber zum Quelltext:
Allgemeine_Einstellungen.bat
REM Hier werden Variablen für die Umlaute definiert, damit Sie nachher im Text richtig angezeigt werden (ANSI/ASCI-Problem)
chcp 1252>nul
set ue=ü
set ae=ä
set oe=ö
set Uue=Ü
set Aae=Ä
set Ooe=Ö
set ss=ß
chcp 850>nul
REM Hier wird die Farbe der Fenster bestimmt
COLOR 0E
REM Und nun noch vor dem jeweiligen "Programmstart" sauber putzen...
CLS
Variablen.ini
Hier stehen wirklich nur die Variablen drin, also alles was nach dem set-Befehl kommt.
Hier dürfen auch keine REMs oder ECHOs drin sein, weil jede Zeile in einer Schleife aufgerufen wird
Computernamen=C:\Schulungsraum\Computernamen_Schulungsraum.txt
Mac-Adressen=C:\Schulungsraum\Mac-Adressen_Schulungsraum.txt
DatenFuerSchueler=C:\Schulungsraum\Daten_fuer_Schueler
WOL=C:\Schulungsraum\woL.exe
Computernamen_Schulungsraum.txt
PCName1
PCName2
PCName3
PCName4
PCName2
PCName3
PCName4
Mac-Adressen_Schulungsraum.txt
Hier unbedingt darauf achten dass die Adressen ohne Trennzeichen sind
001E37411234
001E37411234
001E37411234
001E37411234
001E37411234
001E37411234
001E37411234
Schulungsraum_Erreichbarkeit_pruefen.bat
@ECHO OFF & SETLOCAL
REM hier erfolgt erstmal die Verarbeitung der allgemeinen Einstellungen
call C:\Schulungsraum\Allgemeine_Einstellungen.bat
REM Variablen einlesen
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i
:DoAction
REM Jetzt geht's los - für jeden Eintrag in der Liste der Computernamen ...
for /f %%i in (%Computernamen%) do (
cls
@echo -------------------------------------------------------------------
@echo Computer werden angepingt...
@echo -------------------------------------------------------------------
REM ...wird der jeweilige PC genau einmal angepingt und 50 ms auf eine Antwort gewartet
ping %%i -n 1 -w 50
@echo -------------------------------------------------------------------
@echo Abbruch mit Strg + C
@echo -------------------------------------------------------------------
REM Der nachfolgende Ping auf localhost bewirkt lediglich, dass die Antwort des Rechners noch eine Weile stehen bleibt
ping localhost -n 2 >nul
)
@echo off
REM Und hiermit geht's zurück zum Anfang...
goto DoAction
Schulungsrechner_herunterfahren.bat
REM Hiermit werden die Schulungsrechner heruntergefahren
@ECHO OFF & SETLOCAL
REM hier erfolgt wieder zunächst die Verarbeitung der allgemeinen Einstellungen
call C:\Schulungsraum\Allgemeine_Einstellungen.bat
REM Variablen einlesen
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i
:DoAction
@echo.
@echo ---------------------------------------------------------
@echo Hierdurch werden alle Schulungsrechner heruntergefahren
@echo und ausgeschaltet.
@echo ---------------------------------------------------------
REM ZUr Sicherheit nochmal eine Nachfrage, ob man wirklich alle PCs herunterfahren will
@echo M%oe%chten Sie ALLE Schulungsrechner herunterfahren?
set /p JaOderNein=Ungesicherte Daten k%oe%nnen verloren gehen (J/N):
if /i '%JaOderNein:~0,1%' == 'j' goto :Shutdown
REM Wird nein (bzw. nicht ja) eingegeben, wird die Verarbeitung der Batch abgebrochen
@echo ---------------------------------------------------------
@echo Schulungsrechner werden nicht heruntergefahren, beende
@echo ---------------------------------------------------------
REM Und wieder zum Lesen das Fenster ein bischen offen gelassen
ping localhost -n 3 >nul
exit
:Shutdown
@echo.
@echo ---------------------------------------------------------
@echo Schulungsrechner werden heruntergefahren
@echo ---------------------------------------------------------
echo on
REM Wird "Ja" gewählt, wird der Rechner mit einem entsprechenden Hinweis an den davor Sitzenden heruntergefahren
for /f %%i in (%Computernamen%) do shutdown -s -t 30 -c "Der Computer wird vom Seminarleiter heruntergefahren" -f -m \\%%i
ping localhost -n 3 >nul
Schulungsrechner_starten.bat
REM Hiermit werden die Schulungsrechner gestartet
@ECHO OFF & SETLOCAL
REM Und wieder...
call C:\Schulungsraum\Allgemeine_Einstellungen.bat
REM Variablen einlesen
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i
:DoAction
@echo ----------------------------------------------------------------
@echo Schulungsrechner werden gestartet
@echo ----------------------------------------------------------------
REM Hier wird in einer Schleife jede Mac-Adresse aus der Datei Mac-Adressen_Schulungsraum.txt ausgelesen und der Rechner mit Wake-on-LAN gestartet
for /f %%i in (%Mac-Adressen%) do %wol% %%i
@echo.
@echo ----------------------------------------------------------------
@echo Startbefehl wurden gesendet
@echo ----------------------------------------------------------------
REM Und wieder zur besseren Lesbarkeit:
ping localhost >nul
zu guter letzt
Schulungsrechnern_Daten_kopieren.bat
Wir wollen ja auch Daten für die Schüler bereitstellen. Dafür gibt es einen speziellen Ordner in den der Referent seine Dateien legt und diese dann mit folgender Batch aus alle Schulungsrechner kopiert. Ich gehe hier von kleineren Übungsdateien für Excel oder Word aus, nicht von komplexen Installationsdateien die an spezielle Stellen geschoben werden müssen:
@ECHO OFF & SETLOCAL
REM Und auch hier zum Schluss nochmal die allgemeinen Einstelungen laden:
call C:\Schulungsraum\Allgemeine_Einstellungen.bat
REM Variablen einlesen
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i
:DoAction
@echo -----------------------------------------------------------------
@echo Hiermit werden Alle Dateien aus dem Verzeichnis
@echo %DatenFuerSchueler%
@echo auf die Schulungsrechner kopiert. Eventuell vorhandene Dateien
@echo werden dabei %ue%berschrieben
@echo -----------------------------------------------------------------
@echo.
REM Man kann mit diesem Script die Schüler-Verzeichnisse auch gleich wieder sauber machen, deshalb hier die Abfrage, ob kopiert oder gelöscht werden soll
set /p WasWillstDuTun=M%oe%chten Sie neue Dateien (k)opieren oder alte Daten (l)%oe%schen?
if '%WasWillstDuTun%' == 'k' goto Kopieren
if '%WasWillstDuTun%' == 'l' goto Loeschen
exit
:Kopieren
@echo -----------------------------------------------------------------
@echo Daten von %DatenFuerSchueler% werden kopiert
@echo -----------------------------------------------------------------
REM Beim Kopieren wird eine Schleife ausgeführt die auf jeden in der Datei Computernamen_Schulungsraum.txt stehenden Rechner Die Dateien vom Referenten-PC kopiert
for /f %%i in (%Computernamen%) do xcopy "%DatenFuerSchueler%\*.*" "\\%%i\c$\Schulungsdaten\" /y
@echo -----------------------------------------------------------------
@echo Daten wurden auf alle eingeschalteten Schulungsrechner kopiert
@echo -----------------------------------------------------------------
pause
exit
:Loeschen
@echo -----------------------------------------------------------------
@echo Daten der Schulungsrechner werden gel%oe%scht
@echo -----------------------------------------------------------------
REM Beim löschen wird die Schleife auf jedem in der Datei stehendem PC die Dateien im Verzeichnis löschen
for /f %%i in (%Computernamen%) do del \\%%i\c$\Schulungsdaten\*.* /s /q
@echo -----------------------------------------------------------------
@echo Daten wurden auf alle eingeschalteten Schulungsrechnern gel%oe%scht
@echo -----------------------------------------------------------------
ping localhost -n 5 >nul
exit
So, das war einiges in vielen Dateien und mit vielen Variablen. Ich hoffe es ist dennoch ausreichend erklärt und hilft vielleicht (auch nur in Auszügen) dem einen oder anderen mal was.
Gruß
Larz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 127539
Url: https://administrator.de/contentid/127539
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
7 Kommentare
Neuester Kommentar
Batches soweit klar, ich würde das aber anders triggern, da ich denke, dass eine lokale Ausführung immer besser ist als eine Übertragung übers Netzwerk
Ich würde die Dateien lokal auf jedem Computer ablegen, die beim Start von einer Batch aufgerufen werden. Die Batch als Startskript führt die Aktionen
nur dann durch, wenn eine Flagdatei vorhanden ist. Das Startskript löscht die Flagdatei am Ende der Durchführung.
Die Flagdatei kopiert man nach Aufwecken des (der) PC(s) auf den C$-Share, auf den man ja übers Netz als Admin zugreifen kann.
Das Verteilen der Flagdatei kann ja noch mit einer Batch am Adminplatz automatisieren.
Wenn jetzt der Schulungsteilnehmer den Rechner einschaltet wird erstmal bereinigt, wenn die Flagdatei vorhanden ist. ansonsten wird die
das Startskript zwar aufgerufen, führt aber keine Aktionen durch.
Gruß
ITIL-Harry
Ich würde die Dateien lokal auf jedem Computer ablegen, die beim Start von einer Batch aufgerufen werden. Die Batch als Startskript führt die Aktionen
nur dann durch, wenn eine Flagdatei vorhanden ist. Das Startskript löscht die Flagdatei am Ende der Durchführung.
Die Flagdatei kopiert man nach Aufwecken des (der) PC(s) auf den C$-Share, auf den man ja übers Netz als Admin zugreifen kann.
Das Verteilen der Flagdatei kann ja noch mit einer Batch am Adminplatz automatisieren.
Wenn jetzt der Schulungsteilnehmer den Rechner einschaltet wird erstmal bereinigt, wenn die Flagdatei vorhanden ist. ansonsten wird die
das Startskript zwar aufgerufen, führt aber keine Aktionen durch.
Gruß
ITIL-Harry
Servus Harry,
das war doch keine Frage, sondern ein Tipp...
Larz fehlte wohl nur noch etwas Zeit - um da weiterzuschreiben.
Gruß
das war doch keine Frage, sondern ein Tipp...
Larz fehlte wohl nur noch etwas Zeit - um da weiterzuschreiben.
Gruß
Hallo Larz,
danke für das Posten dieses Tipps hier in "Batch & Shell".
Einen Tipp zum Tipp hätte ich noch.
Du schreibst:
Eigentlich sogar für ein Merkmal von Codequalität, auch wenn das sicherlich keine Vokabel ist, die nun im Batch-Bereich üblich ist.
Jedenfalls haben auch die RedmonderInnen unterstellt,
Die Hilfe zu FOR deutet das auch irgendwie an:
Das bedeutet, um die zugehörigen Parameter-Dateien etwas wartbarer und verständlicher zu machen sind Kommentarzeilen durchaus möglich.
(Richtig ist natürlich: REM- oder ECHO Zeilen sind nicht möglich.)
Untergegangen in der M$-Hilfe ist:
als Default für Kommentarzeilen hast du ohnehin das ";" (Semikolon) immer eingestellt, auch ohne EOL zu erwähnen.
Beispiel/Demo
Grüße
Biber
danke für das Posten dieses Tipps hier in "Batch & Shell".
Einen Tipp zum Tipp hätte ich noch.
Du schreibst:
Variablen.ini
Hier stehen wirklich nur die Variablen drin, also alles was nach dem set-Befehl kommt.
Hier dürfen auch keine REMs oder ECHOs drin sein, weil jede Zeile in einer Schleife aufgerufen wird
Gerade weil ich auch selbst die Schwierigkeiten kenne, ein von anderen Codern erstelltes Skript nachvollziehen zu wollen (oder auch ein von mir geschriebenes nach ein paar Monaten verstehen zu wollen), deshalb halte ich Kommentare für dringend anzuraten.Hier stehen wirklich nur die Variablen drin, also alles was nach dem set-Befehl kommt.
Hier dürfen auch keine REMs oder ECHOs drin sein, weil jede Zeile in einer Schleife aufgerufen wird
Eigentlich sogar für ein Merkmal von Codequalität, auch wenn das sicherlich keine Vokabel ist, die nun im Batch-Bereich üblich ist.
Jedenfalls haben auch die RedmonderInnen unterstellt,
- Text-, Ini- und Parameterdateien werden Kommentarzeilen enthalten
- und diese werden im Batch mit FOR/F-Anweisungen aus- bzw. eingelesen.
Die Hilfe zu FOR deutet das auch irgendwie an:
FOR /?
...
wörter enthält, um verschiedene Parameter für die Analyse anzugeben. Diese
Schlüsselwörter sind:
eol=c - Gibt das Zeichen für Zeilenendekommentare an
(nur eins).
....
Einige Beispiele:
FOR /F "eol=; tokens=2,3* delims=, " %i in (Datei.txt) do @echo %i %j %k
Dadurch wird jede Zeile in der Datei Datei.txt ausgewertet, Zeilen die
mit einem Semikolon beginnen werden ignoriert, für den 2. und 3. Token
...
Das bedeutet, um die zugehörigen Parameter-Dateien etwas wartbarer und verständlicher zu machen sind Kommentarzeilen durchaus möglich.
(Richtig ist natürlich: REM- oder ECHO Zeilen sind nicht möglich.)
Untergegangen in der M$-Hilfe ist:
als Default für Kommentarzeilen hast du ohnehin das ";" (Semikolon) immer eingestellt, auch ohne EOL zu erwähnen.
Beispiel/Demo
D:\temp>type d:\temp\variablen.ini
; Die Datei Computernamen.txt MUSS im angegebenen Pfad existieren
Computernamen=C:\Schulungsraum\Computernamen_Schulungsraum.txt
; Die Mac-Adressendatei MUSS im angegebenen Pfad existieren
Mac-Adressen=C:\Schulungsraum\Mac-Adressen_Schulungsraum.txt
; Daten der Schüler ... Verzeichnis wird bei Bedarf angelegt
DatenFuerSchueler=C:\Schulungsraum\Daten_fuer_Schueler
WOL=C:\Schulungsraum\woL.exe
D:\temp>for /f %i in (d:\temp\variablen.ini) do @echo set %i
set Computernamen=C:\Schulungsraum\Computernamen_Schulungsraum.txt
set Mac-Adressen=C:\Schulungsraum\Mac-Adressen_Schulungsraum.txt
set DatenFuerSchueler=C:\Schulungsraum\Daten_fuer_Schueler
set WOL=C:\Schulungsraum\woL.exe
Grüße
Biber
Moin,
Stände der da - gings auch mit "Boardmitteln" (robocopy ist ja beim Reskit dabei)
Gruß,
Volker
Zitat von @v-m-r-de:
Hi Larz,
würde anstelle von xcopy nicht robocopy mehr sinn machen?
Es würde dann nur Dateien erneut Kopiert werden, die sich tatsächlich auf dem Schüler PCs geändert haben.
"So" wie es jetzt da steht ja - weil der Xcopy parameter /D in der Zeile nicht steht.Hi Larz,
würde anstelle von xcopy nicht robocopy mehr sinn machen?
Es würde dann nur Dateien erneut Kopiert werden, die sich tatsächlich auf dem Schüler PCs geändert haben.
Stände der da - gings auch mit "Boardmitteln" (robocopy ist ja beim Reskit dabei)
Gruß,
Volker