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-Key: 58239

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

Printed on: April 20, 2024 at 04:04 o'clock

Member: dfritz
dfritz May 07, 2007 at 10:26:09 (UTC)
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
Member: LarryHH
LarryHH May 07, 2007 at 10:34:29 (UTC)
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!
Member: Biber
Biber May 07, 2007 at 10:39:52 (UTC)
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
Mitglied: 26705
26705 May 07, 2007 at 10:45:10 (UTC)
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.
Member: LarryHH
LarryHH May 07, 2007 at 11:45:53 (UTC)
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!
Member: LarryHH
LarryHH May 07, 2007 at 12:02:50 (UTC)
Goto Top
Danke auf jeden fal, aber so richtig hat das nicht funktioniert!
Muss ichg da noch etwas an der Batch verändern?
Mitglied: 26705
26705 May 07, 2007 at 12:31:19 (UTC)
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?
Member: LarryHH
LarryHH May 07, 2007 at 13:14:16 (UTC)
Goto Top
Er schreibt gar nichts! Die Bat-datei läuft, aber in die Datei wird nicht geschrieben!
Member: bastla
bastla May 07, 2007 at 16:54:39 (UTC)
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]
Member: miniversum
miniversum May 08, 2007 at 06:10:12 (UTC)
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
Member: LarryHH
LarryHH May 08, 2007 at 08:06:58 (UTC)
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!