Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Vorbereiten eines Schulungsraumes mittels Batch Dateien

Anleitung Entwicklung Batch & Shell

Mitglied: Larz

Larz (Level 2) - Jetzt verbinden

20.10.2009 um 14:34 Uhr, 15123 Aufrufe, 7 Kommentare, 3 Danke

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
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.
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
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.exe

Computernamen_Schulungsraum.txt
PCName1
PCName2
PCName3
PCName4


Mac-Adressen_Schulungsraum.txt
Hier unbedingt darauf achten dass die Adressen ohne Trennzeichen sind

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 DoAction

Schulungsrechner_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 >nul

Schulungsrechner_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 >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:
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
Mitglied: ITIL-Harry
22.10.2009 um 15:06 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
Bitte warten ..
Mitglied: 60730
24.10.2009 um 20:04 Uhr
Servus Harry,

das war doch keine Frage, sondern ein Tipp...

Larz fehlte wohl nur noch etwas Zeit - um da weiterzuschreiben.


Gruß
Bitte warten ..
Mitglied: Biber
24.10.2009 um 23:55 Uhr
Hallo Larz,

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.
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
Bitte warten ..
Mitglied: ITIL-Harry
25.10.2009 um 00:27 Uhr
OK - Sorry - hab meinen Kommentar umgeschrieben, jetzt ist es ein Ergäzungsvorschlag
Bitte warten ..
Mitglied: Larz
26.10.2009 um 11:51 Uhr
Hoi Biber,

danke für die Ergänzung. Das mit dem Semikolon habe ich da wohl überlesen... ist so natürlich viel praktischer, da nachvollziehbar....

Gruß
Larz
Bitte warten ..
Mitglied: v-m-r-de
15.07.2010 um 08:32 Uhr
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.

Gruß,
Volker
Bitte warten ..
Mitglied: 60730
15.07.2010 um 08:55 Uhr
Moin,
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.
Stände der da - gings auch mit "Boardmitteln" (robocopy ist ja beim Reskit dabei)

Gruß,
Volker
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Windows Server
Zuordnung von Netzlaufwerken mit Hilfe von Batch-Dateien (4)

Frage von doc-jochim zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...