larryhh
Goto Top

Daten einer Pingabfrage per Script in eine Logdatei speichern

Hallo zusammen,

ich hab mal schnell eine Frage!
Ich möchte eine Pingabfrage für etwa 500 Rechner starten, um herauszufinden welche Rechner nachts eingeschaltet sind!
Das Ergebnis möchte ich in einer Logdatei speichern, um im nachhinein das ganze nachvollziehen zu können!

Die Pingabfrage habe ich bereits per Script geschrieben und sie funktioniert auch!
Zumindestens für einen Rechner!
Könnt ihr mir ein wenig helfen, wie ich es am besten löse, dass das Script auf eine Datei zugreift in der die 500 Rechner mit IP aufgelistet sind und dann die Ergebnisse der Abfrage in einer Logdatei speichert?

Schon mmal eine schönen Dank für die Mühe im Vorfeld!

Content-ID: 58239

Url: https://administrator.de/contentid/58239

Ausgedruckt am: 26.11.2024 um 10:11 Uhr

dfritz
dfritz 07.05.2007 um 12:26:09 Uhr
Goto Top
Hi,

empfehlen kann ich Dir ggf. das Tool "nmap". Vielleicht kommt es Dir aus der Unix-Welt bekannt vor. Damit kannst Du mit dem Parameter -sP 192.168.0.0/24 ganze Netzbereiche durchsuchen lassen. Angezeigt werden netterweise nur die Systeme, die auch up sind.

Ob Du das nun irgendwie in eine Textdatei Pipen kannst mit einem Batchfile, weiß ich nicht genau. Dafür sind meine DOS Batch Kenntnisse ein wenig eingerostet.

Gruß Daniel
LarryHH
LarryHH 07.05.2007 um 12:34:29 Uhr
Goto Top
Alles klar, danke erstmal dafür!
Aber ich wills mal weiter versuchen ein eigenes Script zu schreiben!
Vielleicht weiß ja noch jemand anderes eine Lösung!
Biber
Biber 07.05.2007 um 12:39:52 Uhr
Goto Top
Moin LarryHH,

bitte Dein Betriebssystem angeben und die Skript-Sprache, in der Du schreibst.

Und/oder den relevanten Teil Deines vorhandenen Skripts.

Danke
Biber
26705
26705 07.05.2007 um 12:45:10 Uhr
Goto Top
Ich habe mir auch mal eine kleine Batch gebaut:


@echo off
if exist ausgabe.txt del ausgabe.txt else
FOR /f %%f IN (hosts.txt) DO (
)



Dazu gehört eine Datei "hosts.txt", in der stehen die Hostname untereinander (einer pro Zeile).
Als Ergebnis bekommt man dann die Datei "ausgabe.txt", dort steht dann drin, welcher Rechner online und welcher offline ist.
LarryHH
LarryHH 07.05.2007 um 13:45:53 Uhr
Goto Top
Hallo Biber,

Betriebssystem ist MS Windows XP Prof.


Als bisherigen Quelltext habe ich:

' Pingabfrage

adresse = "IP"


wql = "select * from NetDiagnostics"
set WshShell = CreateObject("WScript.Shell")
Set wmi = GetObject("winmgmts:{(Shutdown)}//./root/cimv2")
Set obj = wmi.ExecQuery(wql)

For each netdiag in obj:exit For:Next
ok = netdiag.Ping(adresse, rohdaten)

If ok then
MsgBox "Rechner ist erreichbar."
else
MsgBox "Rechner ist unerreichbar."

End If

Ich möchte halt, dass das Script alle Rechner, die nicht per IP erreicht werden, in eine Logdatei schreibt!
LarryHH
LarryHH 07.05.2007 um 14:02:50 Uhr
Goto Top
Danke auf jeden fal, aber so richtig hat das nicht funktioniert!
Muss ichg da noch etwas an der Batch verändern?
26705
26705 07.05.2007 um 14:31:19 Uhr
Goto Top
Ne, eigentlich nicht. Ich habe einfach den Code in ner Datei namens "start_ping.bat" stehen und im gleichen Ordner die "hosts.txt". Es ist auch egal ob in der Datei Hostnamen oder IP-Adressen stehen, ich bekomme ne Ausgabe geschrieben.
Was funktioniert denn nicht? Gibt es ne Fehlermeldung? Schreibt er nichts oder irgendwas wirres in die Ausgabedatei?
LarryHH
LarryHH 07.05.2007 um 15:14:16 Uhr
Goto Top
Er schreibt gar nichts! Die Bat-datei läuft, aber in die Datei wird nicht geschrieben!
bastla
bastla 07.05.2007 um 18:54:39 Uhr
Goto Top
Hallo LarryHH!

Etwas knapper gehalten könnte das etwa so aussehen:
Set fso = CreateObject("Scripting.FileSystemObject")  
Address = Split(fso.OpenTextFile("D:\IPListe.txt").ReadAll, vbCrLF)  
Set Result = fso.OpenTextFile("D:\Unerreichbar.txt", 2, True)  
For i = 0 To UBound(Address)
	wql = "select * from NetDiagnostics"  
	Set wmi = GetObject("winmgmts:{(Shutdown)}//./root/cimv2")  
	Set obj = wmi.ExecQuery(wql)
	For Each netdiag In obj
		If Not netdiag.Ping(Address(i)) Then Result.WriteLine Address(i)
	Next
Next
Result.Close
WScript.Echo "Fertig."  
Das "WScript.Echo" am Schluss ist natürlich nur Verzierung ... face-wink

Grüße
bastla

[Edit] Zumindest die Zeilen "wql = ..." und "Set wmi = ..." könnten vor die Schleife gezogen werden ... [/Edit]
miniversum
miniversum 08.05.2007 um 08:10:12 Uhr
Goto Top
Die Batch sollte gehen.
Ich habe auch so eine ähnliche allerdings ohne das find.
Die sieht dann verglichen so aus:
@echo off
if exist ausgabe.txt del ausgabe.txt
FOR /f %%f IN ('type hosts.txt') DO (  
ping /n 1 /w 150 %%f
if %errorlevel% (
echo %%f - OFFLINE >>ausgabe.txt
) else (
echo %%f - online >>ausgabe.txt
)
)
miniversum
LarryHH
LarryHH 08.05.2007 um 10:06:58 Uhr
Goto Top
Vielen Dank für euer aller Hilfe!
Es funktioniert endlich mit Hilfe deines Scriptes @ Bastla!

Ihr habt mir sehr geholfen!
Viel Spaß euch noch und schönen Tag!