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
GELÖST

Ping- Batch-Script um PCs aufzuwecken

Frage Entwicklung Batch & Shell

Mitglied: Simon-MCP

Simon-MCP (Level 1) - Jetzt verbinden

04.06.2007, aktualisiert 11.06.2007, 9830 Aufrufe, 9 Kommentare

Grundlegendes über aus- und einlesen einer Textdatei

Hallo,

Ich habe folgendes Problem:
Ich will mehrere PCs in der Nacht per WakeOnLan starten um einen Virenscanner laufen zu lassen. Nach ca. 2h sollen die PCs wieder per shutdown befehl heruntergefahren werden.

Doch nun zum dem aus meiner Sicht schwierigsten Punkt:
Nach den 2h sollen nur die PCs ausgeschaltet werden, die vorher auch schon ausgeschaltet waren. Das heißt Rechner die schon an waren, sollen an bleiben und nicht heruntergefahren werden.

Meine Überlegungen:
[Feststellen welche Rechner an sind]
irgendwie mit dem ping befehl und dann das Ergebnis jeweils in eine Textdatei schreiben und die später wieder auslesen um zu wissen, welche Rechner wieder heruntergefahren werden müssen.
Doch leider habe ich keine Idee wie ich das realisieren kann.

[Rechner starten]
per WakeOnLan mit dem Tool mc-wol.exe

[Rechner herunterfahren]
per shutdown.exe

Habt ihr vielleicht ein paar Ideen für mich, wie ich das am besten umsetzen kann ?
Mitglied: IchoTolot2
04.06.2007 um 19:43 Uhr
Eine Möglichkeit wäre auch über einen Umweg zu arbeiten:

Bei allen Rechnern ein Script in den Autostart legen das den Rechnernamen in eine zentrale Datei schreibt.

Diese Datei vor dem Starten der Rechner mit WOL leeren.

Nach 2 h jede Zeile der Datei an den Shutdown durchreichen.


So mal meine Idee zu dem Thema

LG
Ingo
Bitte warten ..
Mitglied: Simon-MCP
04.06.2007 um 20:43 Uhr
Hallo Icho Tolot,

vielen Dank erstmal für deinen Beitrag.
Dies ist leider keine Lösung für mich. Das ganz soll Zentral (z.B. von einem Server) verwaltet werden können. Ohne jeden Rechner anfassen zu müssen.

Es würde mir auch schon sehr viel weiterhelfen, wenn mir jemand sagen könnte,
wie man eine Textdatei richtig ausliest.

Beispiel Textdatei:

IPs.txt ----
192.168.2.3
192.168.2.4
192.168.2.5
192.168.2.6
...
Ich möchte die Werte nacheinander auslesen und dann nach und nach abarbeiten.

@Mein bisheriger Code:
for /f "Token=*" %%i in (IPs.txt) set var=%%i
ping %var% | find "TTL" >output.txt

Doch leider weise ich so der Variable "var" immer nur den letzten Wert... und nicht alle Werte nach einander zu... was muss ich ändern ?
Bitte warten ..
Mitglied: Biber
04.06.2007 um 21:10 Uhr
Moin crus-online#de,

willkommen im Forum.

Zu den FOR /F-Anweisungen findest Du hier im Forum eine Menge Beispiele.

Im Prinzip kannst Du das als Batch-Newbie stur nach folgendem Schema machen (und pflegen):
01.
<b>FOR /F </b> %%i in (Dein.txt) <b>DO call :ProcessALine</b> %%i 
02.
<b>goto :eof</b> 
03.
~~~~~~~Hier ist die Abarbeitung der Textdatei und auch der Batch zu Ende~~ 
04.
 
05.
<b>:ProcessALine</b> Parameter1( also %1)  ist das erste Token der Zeile 
06.
REM MachWasMit %1 ...    
07.
<b>goto :eof</b>
In Deinem Fall:
01.
@echo off & setlocal 
02.
... 
03.
Echo MalNeFastLeereDateiAnlegen> %temp%\TheseWereAlive.txt 
04.
FOR /F "tokens=1" %%i in (IPs.txt) DO call :PingAlleAb %%i 
05.
FOR /F "tokens=1,2" %%i in (IPs.txt) DO call :WeckAlleAuf %%i %%j 
06.
goto :eof 
07.
~~~~~~~Hier ist die Abarbeitung der Textdatei und auch der Batch zu Ende~~ 
08.
 
09.
:PingAlleAb Parameter1( also %1)  ist das erste Token der Zeile 
10.
REM MachWasMit %1 ...     in Deinem Fall: 
11.
Ping %1 |find "TTL" >nul && echo %1>>%temp%\TheseWereAlive.txt 
12.
goto :eof 
13.
~~~ 
14.
:WeckalleAuf Param1 ist die IP, Param2 die MAC-Adresse  
15.
::.... Alternativ: MAC-Adresse aus IP-Ermitteln (z.B mit GetMac.exe oder mcGetMac.exe 
16.
:: ... oder aus seperater Liste/Textdatei .... 
17.
::....  oder eben aus der IPs.txt (kann ja das zweite Token sein) .... 
18.
 
19.
Find "%1" "%temp%\TheseWereAlive.txt" || mc-wol %2 /i %1  
20.
:: Alle IPs, die noch nicht wach waren, aufwecken 
21.
......(Start Virenscanner....) 
22.
Find "%1" "%temp%\TheseWereAlive.txt" || Shutdown..... 
23.
:: Alle IPs, die nicht wach waren, schlafen legen
So in etwa die ungetestete Skizze.

Ach ja, die IPs.txt würde ich so erweitern:
01.
---- IPs.txt ---- 
02.
192.168.2.3, 00-11-20-3E-C1-C9 
03.
192.168.2.4, 00-12-21-3E-C2-C8 
04.
192.168.2.5, 00-13-22-3E-C3-C7 
05.
192.168.2.6, 00-14-23-3E-C4-C6 
06.
...
Gruss
Biber
[Edit] @geTuemII
Welchen sittlichen Nährwert hat denn dann das Setzen der Variablen %var% für diese flüchtige Sekunde?
Dann reicht doch:
01.
for /f "Token=1" %%i in (IPs.txt) do ping %%i |find "TTL" >> output.txt
...ach, Frauen....
Aber schön, Dich zu lesen...
[/Edit]
Bitte warten ..
Mitglied: geTuemII
04.06.2007 um 21:19 Uhr
Du meinst, in der output.txt steht immer nur der letzte Wert?

01.
for /f "Token=*" %%i in (IPs.txt) do ( 
02.
set var=%%i 
03.
ping %var% |find "TTL" >> output.txt)
Nicht getestet.
[Edit] Ups, Der Meister [tm] war schneller, nimm also das.[/Edit]

geTuemII
Bitte warten ..
Mitglied: Simon-MCP
05.06.2007 um 10:57 Uhr
Hallo Biber,

vielen, vielen Dank erst mal für deine sehr ausführlich Hilfe.

Ein kleines Problem habe ich mit dem Script allerdings noch:
An dem Punkt "Alle PCs aufwecken", weckt er leider nicht alle auf. Er weckt einen von den xx PCs auf und dann springt er sofort in die Virenscanner Routine und danach in die Shutdown Routine. Erst dann wird der nächste PC aus der Liste aufgeweckt.

Kann man dies auch so realisieren, dass er erst ALLE PCs einschaltet und dann weiter geht ?

Aktuell sieht der Code folgendermaßen aus:
01.
@echo off & setlocal 
02.
Echo MalNeFastLeereDateiAnlegen> %temp%\TheseWereAlive.txt 
03.
FOR /F "tokens=1" %%i in (C:\aufwecken\IPs.txt) DO call :PingAlleAb %%i 
04.
FOR /F "tokens=1,2" %%i in (C:\aufwecken\IPs.txt) DO call :WeckAlleAuf %%i %%j 
05.
goto :eof 
06.
 
07.
:PingAlleAb Parameter1( also %1)  ist das erste Token der Zeile 
08.
REM MachWasMit %1 ...     in Deinem Fall: 
09.
Ping %1 |find "TTL" >nul && echo %1>>%temp%\TheseWereAlive.txt 
10.
goto :eof 
11.
 
12.
:WeckalleAuf Param1 ist die IP, Param2 die MAC-Adresse  
13.
Find "%1" "%temp%\TheseWereAlive.txt" || C:\aufwecken\mc-wol.exe %2 /i %1  
14.
:: Alle IPs, die noch nicht wach waren, aufwecken 
15.
 
16.
Echo (Start Virenscanner....) 
17.
C:\aufwecken\Sleep 7200 
18.
 
19.
Find "%1" "%temp%\TheseWereAlive.txt" || C:\Windows\System32\shutdown.exe -s -f -m \\%1 
20.
:: Alle IPs, die nicht wach waren, schlafen legen
An der Stelle:
Echo (Start Virenscanner...)
C:\aufwecken\SLEEP.exe 7200


Halte ich das Script für 2h an, dass der Virenscanner genug Zeit hat, einen Fullscan durchzuführen.
Dadurch wird der Start des nächsten PCs natürlich um 2h verzögert. Dies ist leider etwas schlecht, da es sich um mehrere Rechner handelt und eine Nacht dann nicht ausreichen würde.

Kann man durch einen Befehl erreichen, dass er erst zur nächsten Routine geht, nachdem alle Rechner (die nicht eingeschaltet waren) aufgeweckt wurden?
Bitte warten ..
Mitglied: geTuemII
05.06.2007 um 12:52 Uhr
Wo sehe ich denn eigentlich den Startaufruf des Virenscanners? Kannst du das über CALL auf ein anderes Batch machen? IMHO wartet das aufrufende Batch nämlich in neueren BS nicht mehr, bis das Sub abgearbeitet worden ist.

@Biber: %var% kann nur wegen Nutzlosigkeit nicht einfach so in diesem Script gekündigt werden, sonst gibt es Ärger mit dem Gleichstellungsbeauftragten. Ist schließlich ein Mädchen.

geTuemII
Bitte warten ..
Mitglied: Simon-MCP
05.06.2007 um 13:19 Uhr
Hallo geTuemII,

den Aufruf vom Virenscanner werde ich über eine Management Console von Symantec steuern.
Die Rechner müssen dazu nur eingeschaltet sein. --> Rest wird über die Konsole erledigt. (ausser das Herunterfahren :D)

Das Script von Biber funktioniert echt einwandfrei. Habe gerade nur einen Rechner in der Textdatei angegeben und dieser wird sauber gestartet wartet meine Pause ab und wenn er eingeschaltet war wird er angelassen und wenn er aus war wird er heruntergefahren.

Einzigstes Problem:
Sobald ich 2 Rechner in die Textdatei eintrage, dann arbeitet er die PCs nacheinander ab anstatt Sie alle erst hoch zu fahren und dann am Schluss wieder alle runter zu fahren.


Vielen Dank für Eure bisherigen Bemühungen.
Bitte warten ..
Mitglied: Biber
05.06.2007 um 20:19 Uhr
Moin crus-online,

Kann man durch einen Befehl erreichen, dass er erst zur nächsten Routine geht, nachdem alle Rechner (die nicht eingeschaltet waren) aufgeweckt wurden?

Bau dafür einfach drei FOR /F Anweisungen und drei geCALLte Blöcke nacheinander auf.

Runde 1) FOR/F ...[Wie oben].....DO Call:PingAlleAb %%i
Runde 2) FOR/F ...[Wie oben].....DO Call:WeckAlleAuf %%i %%j
Runde 3) FOR/F ...[Wie oben].....DO Call:StartAVTool %%i

wobei sich :WeckalleAuf verkürzt auf:
Find "%1" "%temp%\TheseWereAlive.txt" || C:\aufwecken\mc-wol.exe %2 /i %1
goto :eof

Und was Du bei :StartAVTool machst, hängt davon ab, ob Du alle Clients scannen willst mit der Rechnerleistung Deines Servers oder ob die jeweils "selbst" eine Anwendung starten sollen.
Der erste Fall (Server scannt alle Clients) wäre dann:
01.
:StartAVTool 
02.
START AvTool.exe [AVTool-Parameterliste] [Ip-Adresse==%1+Lw-Angabe] 
03.
goto :eof
Nach diesen drei FOR-Anweisungen kannst Du dann eine Zeile mit "sleep 7200" einfügen.
Als Letztes dann...
Runde 4) FOR /F ...[Wie oben]... Do CALL :LegAlleSchlafen %%i
01.
:LegAlleSchlafen 
02.
Find "%1" "%temp%\TheseWereAlive.txt" || C:\Windows\System32\shutdown.exe -s -f -m \\%1 
03.
:: Alle IPs, die nicht wach waren, schlafen legen 
04.
goto :eof
Thats all.
01.
 Einzigstes Problem:
Du meintest sicher: "Einziges Problem:"?

HTH Biber
P.S. @geTuemII
...mit dem/der Gleichstellungsbeauftragten...
Liebe Grüße an alle Variablen und Platzhalterinnen
Bitte warten ..
Mitglied: Simon-MCP
11.06.2007 um 08:34 Uhr
Hallo Biber,

vielen, vielen Dank für deine Super Hilfe.
Das Script läuft soweit echt Super. Ich habe noch ein paar kleinere Probleme, aber ich denke das ich diese auch noch in den Griff bekommen werde.

*5 Sterne für dich ;-D*

@Mein komplettes Script lautet nun:
01.
@echo off & setlocal 
02.
::Temporäre Datei anlegen 
03.
Echo TempDatei> %temp%\TheseWereAlive.txt 
04.
 
05.
FOR /F "tokens=1" %%i in (C:\aufwecken\IPs.txt) DO call :PingAlleAb %%i 
06.
FOR /F "tokens=1,2" %%i in (C:\aufwecken\IPs.txt) DO call :WeckAlleAuf %%i %%j 
07.
 
08.
Echo (Start des Virenscanner) 
09.
::Pause von 2h damit der Virenscanner durchlaufen kann 
10.
C:\aufwecken\SLEEP.EXE 120 
11.
 
12.
FOR /F "tokens=1,2" %%i in (C:\aufwecken\IPs.txt) DO call :LegAlleSchlafen %%i 
13.
goto :eof 
14.
 
15.
:PingAlleAb 
16.
Echo (Ueberpruefen, welche Rechner schon eingeschaltet sind) 
17.
Ping %1 |find "TTL" >nul && echo %1>>%temp%\TheseWereAlive.txt 
18.
goto :eof 
19.
 
20.
:WeckalleAuf (Param1 ist die IP, Param2 die MAC-Adresse) 
21.
Echo (Rechner die nicht eingeschaltet waren, jetzt einschalten) 
22.
Find "%1" "%temp%\TheseWereAlive.txt" || C:\aufwecken\mc-wol.exe %2 /i %1  
23.
:: Alle IPs, die noch nicht wach waren, aufwecken 
24.
goto :eof 
25.
 
26.
:LegAlleSchlafen 
27.
Echo (Rechner die nicht eingeschaltet waren, wieder herunterfahren) 
28.
Find "%1" "%temp%\TheseWereAlive.txt" || C:\Windows\System32\shutdown.exe -s -f -m \\%1 
29.
:: Alle IPs, die nicht wach waren, schlafen legen 
30.
goto :eof
cu
Crus
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Batch Script Editor - Programmvorstellung des Entwicklers (16)

Tipp von wowItsDoge zum Thema Batch & Shell ...

Windows Server
Batch Script bei Start ausführen (3)

Frage von KEFHVDI zum Thema Windows Server ...

Batch & Shell
Batch-Script für Lizenzen (3)

Frage von stoepsu77 zum Thema Batch & Shell ...

Batch & Shell
Batch-Script für die Messung der Netzwerkgeschwindigkeit (10)

Anleitung von Kraemer zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...