Jump to content

Batch zum pingen von Servern aus einer Textdatei


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

gibt es ein Programm (wahrscheinlich eher nicht) oder eine einfache Möglichkeit mit einer Batch Servernamen aus einer Datei auszulesen und diese zu pingen? Bei der Suche in den Beiträgen habe ich schon gefunden dass das mit einer for-Schleife gemacht werden muss, aber genau für diesen Fall hab´ ich nix gefunden. Wenn´s zu aufwändig ist: kann ich mich da irgendwo einlesen?

 

Vielen Dank für eure Antworten

Grüsse

macgarnigle

Link zu diesem Kommentar

Danke Finanzamt.

Da sich die Servereinträge in der txt-Datei aber immer ändern wäre es recht wenn ich irgendwas in die Befehlszeile eintippen und auf die Textdatei verweisen könnte, primitiv gesagt:

 

"ping fürjedeneintragindatei c:\server.txt"

 

(fürjedeneintragindatei steht für den Befehl den es vermutlich gibt und der die Textdatei nacheinander durchgeht und sich jeden Eintrag nacheinander vornimmt)

 

schöne Grüsse

macgarnigle

Link zu diesem Kommentar

Hallo,

 

@operator: ich hab´ immer wieder einige server durchzustarten und das sind eigentlich jedesmal andere. die server hab´ ich immer als txt-file vorliegen, weshalb es praktisch wäre wenn ich dieses gleich so irgendwo einbauen könnte dass diese dann alle angepingt werden (ich will halt anschliessend nicht alle händisch pingen, sind meistens über 20 stück).

 

@thorgood: wenn ich das ausführ´ kommt die fehlermeldung: "%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar.

 

Danke für eure Mühe.

Link zu diesem Kommentar
  • 5 Monate später...

Hallo,

 

bei den Thema muss ich mich gleich mal anschließen. Ich hab folgendes Problem

 

Ich möchte mit einer for-Schleife aus einer Textdatei mehrere Parameter durch Semikolon getrennt auslesen. Leider schaff ich es nur max 2 Parameter aus einer Zeile rauszubekommen. Wie schaff ich es 3 und mehrere Werte auszulesen?

 

Hier z.B. eine Textfile Namens server.txt

Servername;IP-Adresse;Dienst
server1;192.168.1.81;snmp
server2;192.168.1.32;wuauserv
server3;;wuauserv

 

...und meine For-Schleife

C:\>for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do net send client1
s Server: %1 mit IP-Adresse: %2 und Dienst %3

 

Ausgabe ist :

Server: server1 mit IP-Adresse: 192.168.1.81,snmp; und Dienst %3

 

Ich habs auch schon mit alphabetischen Variabelen versucht. Der verschluckt mir immer den zweiten Semikolon und erkennt den rest als eine Zeichenkette. Da ist doch noch ein Wrum drin.... :confused:

 

Danke für Tips

 

Gruß

 

Patrick

Link zu diesem Kommentar

Hallo,

 

wenn ich das richtig sehe, enthält der Block eins den Servernamen, der Block zwei durch den Asteriskus den rest der Zeile. Das sollen doch aber wohl Token 2 und 3 sein, oder.

Wie ist es denn, wenn Tokens=1-3 angegeben werden? Schliesslich werden ja auch die Parameter %1-%3 verwendet.

Was mich in diesem Fall etwas wundert ist die Verwendung von %1-%3. Ich mache es immer mit %i, %j, %k; in Batches mit %%i, %%j, %%k.

 

Gruß

 

Edgar

Link zu diesem Kommentar
  • 2 Wochen später...

Hallo,

 

jetzt hab ich noch eine Frage zu diesen Thema.

 

Ich hab die FOR-Schleife noch nicht so 100%ig im Griff. Leider konnte ich auch im Netzt keine richtige Lösung für mich finden. Ich will die FOR-Schleife mit einer IF-Schleife kompinieren. Also so in etwa:

 

FOR {

IF { .............}

}

 

[color=Green]for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do [/color][color=Red]net send client1
s Server: %1 mit IP-Adresse: %2 und Dienst %3[/color]

 

Der DO-Teil soll durch folgende IF-Anweisung ersetzt werden. (Link )

[color=Green]for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do [color=DarkOrange][size=7]{[/size][/color] [/color][color=Red]netsvc /query \\hostname dienstname | find /i "is not running on host"
if not errorlevel 1 goto notrunning
netsvc /query \\hostname dienstname | find /i "is running on host"
if not errorlevel 1 goto running
goto ende

:notrunning
net send hostname2 "Dienst laeuft nicht mehr !!!!"
goto ende

:running
net send hostname2 "Dienst laeuft noch immer"

:ende[/color][color=DarkOrange][size=7]}[/size][/color]

 

Es soll für jeden gefundene Zeile in der FOR-Schleife die IF-Anweisung ausgeführt werden, danach, falls noch Zeilen vorhanden sind, wird die FOR-Schleife weiter ausgeführt.

 

Das sollte doch machbar sein oder? Ich habe schon viel Probiert, aber ich krieg das einfach nicht hin.

 

Mir würde auch ein ganz einfaches Beispiel einer FOR-IF-Schleifenkombination reichen. Muss nicht 100%ig auf mein Problem zugeschnitten sein. Wenn ichs Grundsätzlich weiß obs geht, wenn ja wie, dann komm ich schon dahinter.

 

Danke für Tips.

 

Gruß

 

Patrick

Link zu diesem Kommentar

Hallo Patrik,

 

mir scheint ein Problem ist die Klammerung für den DO-Teil. Du darfst keine geschweiften, sondern musst die runden Klammern verwenden.

Übrigens, IF ist keine Schleife, es ist der Befehl für eine bedingte Ausführung eines Befehl.

Weiter schau dir bitte mal an, wie Code oder Listen in einem Beitrag dargestellt wird. Das Schlüsselwort ist Code. Es wird in rechteckige Klammern gesetzt, das Ende der Codedarstellung wird mit einem Slash zwischen der öffnenden Klammer und dem Schlüsselwort eingeleitet.

 

Viel Erfolg

 

Edgar

 

 

for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do (

netsvc /query \\hostname dienstname | find /i "is not running on host"
if not errorlevel 1 goto notrunning
netsvc /query \\hostname dienstname | find /i "is running on host"
if not errorlevel 1 goto running
goto ende

:notrunning
net send hostname2 "Dienst laeuft nicht mehr !!!!"
goto ende

:running
net send hostname2 "Dienst laeuft noch immer"

:ende
)

Link zu diesem Kommentar

Hallo Edgar,

 

danke für die Antwort, hat mir wieder ein Stück weiter geholfen.

 

Ich hab mal wieder getestet. Hier mal mein aktuelles Script:

@echo on
for /f "skip=1 tokens=1-3,* delims=;" %%e in (C:\server.txt) do (
net send pc030hs "EINS - %%e - %%f - %%g"
netsvc /query \\%%e %%g | find /i "is stopped on \\%%e"
if not errorlevel 1 goto notrunning
netsvc /query \\%%e wuauserv | find /i "is running on \\%%e"
if not errorlevel 1 goto running
goto ende
:notrunning
net send pc030hs "Dienst laeuft nicht mehr !!!!"
goto ende
:running
net send pc030hs "Dienst laeuft noch immer"
:ende
pause
sleep 3
)

 

..und die Ausgabe von der DOS-Box wenn ich das Script starte:

C:\tasks\checkdienste>for /F "skip=1 tokens=1-3,* delims=;" %e in (C:\server.txt
) do (
net send pc030hs "EINS - [color=DarkGreen]%e - %f - %g[/color]"
netsvc /query \\[color=DarkGreen]%e %g[/color]   | find /i "is stopped on \\[color=DarkGreen]%e[/color]"
if not errorlevel 1 goto notrunning
netsvc /query \\[color=DarkGreen]%e[/color] wuauserv   | find /i "is running on \\[color=DarkGreen]%e[/color]"
if not errorlevel 1 goto running
goto ende
net send pc030hs "Dienst laeuft nicht mehr !!!!"
goto ende
net send pc030hs "Dienst laeuft noch immer"
pause
sleep 3
)

C:\tasks\checkdienste>(
net send pc030hs "EINS - rsw2 - 172.16.1.32 - wuauserv"
netsvc /query \\rsw2 wuauserv   | find /i "is stopped on \\rsw2"
if not errorlevel 1 goto notrunning
netsvc /query \\rsw2 wuauserv   | find /i "is running on \\rsw2"
if not errorlevel 1 goto running
goto ende
net send pc030hs "Dienst laeuft nicht mehr !!!!"
goto ende
net send pc030hs "Dienst laeuft noch immer"
pause
sleep 3
)
Die Nachricht wurde erfolgreich an PC030HS gesendet.

Service is stopped on \\rsw2

C:\tasks\checkdienste>net send pc030hs "Dienst laeuft nicht mehr !!!!"
Die Nachricht wurde erfolgreich an PC030HS gesendet.


C:\tasks\checkdienste>goto ende

C:\tasks\checkdienste>pause
Drücken Sie eine beliebige Taste . . .

 

nach dem Tücken der Taste ist das Script aus.

 

Warum werden beim scheinbar ersten Durchlauf keine Variabelen geschrieben, sondern %e usw. (siehe grün)

 

Warum wird nur der erste Server geprüft? In meiner server.txt hab ich 3 Server eingetragen. Irgendwie funktioniert die FOR-Schleife noch nicht so 100%ig.

 

Vielen Dank für Tips.

 

Gruß

 

Patrick

 

PS. Ich glaube jetzt bin ich kurz vorm Ziel ;)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...