Vorbereiten eines Schulungsraumes mittels Batch Dateien
20.10.2009
14:34:54 Uhr10369 Aufrufe
7 Antworten
14:34:54 Uhr
7 Antworten
Hilfreich +3
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.
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
- 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
01.
REM Hier werden Variablen für die Umlaute definiert, damit Sie nachher im Text richtig angezeigt werden (ANSI/ASCI-Problem) 02.
chcp 1252>nul 03.
set ue=ü 04.
set ae=ä 05.
set oe=ö 06.
set Uue=Ü 07.
set Aae=Ä 08.
set Ooe=Ö 09.
set ss=ß 10.
chcp 850>nul 11.
12.
REM Hier wird die Farbe der Fenster bestimmt 13.
COLOR 0E 14.
15.
REM Und nun noch vor dem jeweiligen "Programmstart" sauber putzen... 16.
CLSVariablen.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
01.
Computernamen=C:\Schulungsraum\Computernamen_Schulungsraum.txt 02.
Mac-Adressen=C:\Schulungsraum\Mac-Adressen_Schulungsraum.txt 03.
DatenFuerSchueler=C:\Schulungsraum\Daten_fuer_Schueler 04.
WOL=C:\Schulungsraum\woL.exeComputernamen_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
01.
@ECHO OFF & SETLOCAL 02.
REM hier erfolgt erstmal die Verarbeitung der allgemeinen Einstellungen 03.
call C:\Schulungsraum\Allgemeine_Einstellungen.bat 04.
05.
REM Variablen einlesen 06.
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i 07.
08.
:DoAction 09.
REM Jetzt geht's los - für jeden Eintrag in der Liste der Computernamen ... 10.
for /f %%i in (%Computernamen%) do ( 11.
cls 12.
@echo ------------------------------------------------------------------- 13.
@echo Computer werden angepingt... 14.
@echo ------------------------------------------------------------------- 15.
REM ...wird der jeweilige PC genau einmal angepingt und 50 ms auf eine Antwort gewartet 16.
ping %%i -n 1 -w 50 17.
@echo ------------------------------------------------------------------- 18.
@echo Abbruch mit Strg + C 19.
@echo ------------------------------------------------------------------- 20.
REM Der nachfolgende Ping auf localhost bewirkt lediglich, dass die Antwort des Rechners noch eine Weile stehen bleibt 21.
ping localhost -n 2 >nul 22.
) 23.
@echo off 24.
REM Und hiermit geht's zurück zum Anfang... 25.
goto DoActionSchulungsrechner_herunterfahren.bat
01.
REM Hiermit werden die Schulungsrechner heruntergefahren 02.
03.
@ECHO OFF & SETLOCAL 04.
REM hier erfolgt wieder zunächst die Verarbeitung der allgemeinen Einstellungen 05.
call C:\Schulungsraum\Allgemeine_Einstellungen.bat 06.
07.
REM Variablen einlesen 08.
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i 09.
10.
:DoAction 11.
@echo. 12.
@echo --------------------------------------------------------- 13.
@echo Hierdurch werden alle Schulungsrechner heruntergefahren 14.
@echo und ausgeschaltet. 15.
@echo --------------------------------------------------------- 16.
REM ZUr Sicherheit nochmal eine Nachfrage, ob man wirklich alle PCs herunterfahren will 17.
@echo M%oe%chten Sie ALLE Schulungsrechner herunterfahren? 18.
set /p JaOderNein=Ungesicherte Daten k%oe%nnen verloren gehen (J/N): 19.
if /i '%JaOderNein:~0,1%' == 'j' goto :Shutdown 20.
REM Wird nein (bzw. nicht ja) eingegeben, wird die Verarbeitung der Batch abgebrochen 21.
@echo --------------------------------------------------------- 22.
@echo Schulungsrechner werden nicht heruntergefahren, beende 23.
@echo --------------------------------------------------------- 24.
REM Und wieder zum Lesen das Fenster ein bischen offen gelassen 25.
ping localhost -n 3 >nul 26.
exit 27.
28.
:Shutdown 29.
@echo. 30.
@echo --------------------------------------------------------- 31.
@echo Schulungsrechner werden heruntergefahren 32.
@echo --------------------------------------------------------- 33.
echo on 34.
REM Wird "Ja" gewählt, wird der Rechner mit einem entsprechenden Hinweis an den davor Sitzenden heruntergefahren 35.
for /f %%i in (%Computernamen%) do shutdown -s -t 30 -c "Der Computer wird vom Seminarleiter heruntergefahren" -f -m \\%%i 36.
ping localhost -n 3 >nulSchulungsrechner_starten.bat
01.
REM Hiermit werden die Schulungsrechner gestartet 02.
03.
@ECHO OFF & SETLOCAL 04.
REM Und wieder... 05.
call C:\Schulungsraum\Allgemeine_Einstellungen.bat 06.
07.
REM Variablen einlesen 08.
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i 09.
10.
:DoAction 11.
@echo ---------------------------------------------------------------- 12.
@echo Schulungsrechner werden gestartet 13.
@echo ---------------------------------------------------------------- 14.
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 15.
for /f %%i in (%Mac-Adressen%) do %wol% %%i 16.
@echo. 17.
@echo ---------------------------------------------------------------- 18.
@echo Startbefehl wurden gesendet 19.
@echo ---------------------------------------------------------------- 20.
REM Und wieder zur besseren Lesbarkeit: 21.
ping localhost >nulzu 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:
01.
@ECHO OFF & SETLOCAL 02.
REM Und auch hier zum Schluss nochmal die allgemeinen Einstelungen laden: 03.
call C:\Schulungsraum\Allgemeine_Einstellungen.bat 04.
05.
REM Variablen einlesen 06.
for /f %%i in (C:\Schulungsraum\variablen.ini) do set %%i 07.
08.
:DoAction 09.
@echo ----------------------------------------------------------------- 10.
@echo Hiermit werden Alle Dateien aus dem Verzeichnis 11.
@echo %DatenFuerSchueler% 12.
@echo auf die Schulungsrechner kopiert. Eventuell vorhandene Dateien 13.
@echo werden dabei %ue%berschrieben 14.
@echo ----------------------------------------------------------------- 15.
@echo. 16.
17.
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 18.
set /p WasWillstDuTun=M%oe%chten Sie neue Dateien (k)opieren oder alte Daten (l)%oe%schen? 19.
if '%WasWillstDuTun%' == 'k' goto Kopieren 20.
if '%WasWillstDuTun%' == 'l' goto Loeschen 21.
exit 22.
23.
:Kopieren 24.
@echo ----------------------------------------------------------------- 25.
@echo Daten von %DatenFuerSchueler% werden kopiert 26.
@echo ----------------------------------------------------------------- 27.
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 28.
for /f %%i in (%Computernamen%) do xcopy "%DatenFuerSchueler%\*.*" "\\%%i\c$\Schulungsdaten\" /y 29.
@echo ----------------------------------------------------------------- 30.
@echo Daten wurden auf alle eingeschalteten Schulungsrechner kopiert 31.
@echo ----------------------------------------------------------------- 32.
pause 33.
exit 34.
35.
:Loeschen 36.
@echo ----------------------------------------------------------------- 37.
@echo Daten der Schulungsrechner werden gel%oe%scht 38.
@echo ----------------------------------------------------------------- 39.
REM Beim löschen wird die Schleife auf jedem in der Datei stehendem PC die Dateien im Verzeichnis löschen 40.
for /f %%i in (%Computernamen%) do del \\%%i\c$\Schulungsdaten\*.* /s /q 41.
@echo ----------------------------------------------------------------- 42.
@echo Daten wurden auf alle eingeschalteten Schulungsrechnern gel%oe%scht 43.
@echo ----------------------------------------------------------------- 44.
ping localhost -n 5 >nul 45.
exit 46.
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
ITIL-Harry schreibt am 22.10.2009 um 15:06:45 Uhr
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
Biber schreibt am 24.10.2009 um 23:55:44 Uhr
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.exeGrüße
Biber
ITIL-Harry schreibt am 25.10.2009 um 00:27:20 Uhr
OK - Sorry - hab meinen Kommentar umgeschrieben, jetzt ist es ein Ergäzungsvorschlag
TimoBeil schreibt am 15.07.2010 um 08:55:43 Uhr
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










