Windows 2003 Shell Scripting

Shell Scripting im Netzwerk

Ping-Liste

Mit dem folgenden Script können Sie feststellen, welche Rechner innerhalb des Subnets gerade online sind. Als Ergebnis erhalten Sie eine Liste mit IP-Adressen. Diese könnten dann von einem anderen Script weiterverarbeitet werden.

Mithilfe einer Zählschleife (for /L) wird der Bereich von 1 bis 254 in Einerschritten durchlaufen. Für jeden Wert wird ein einzelnes Ping (-n 1) ausgeführt. Die Ausgabe der gesamten Schleife (deshalb die runden Klammern) wird per Piping an den find-Filter übergeben, der alle Rechner heraussucht, die geantwortet haben. Bei einem englischen Windows müssen Sie den Text „Antwort“ bei find durch „reply“ ersetzen. Durch die Option /i ist die Schreibweise (groß oder klein) gleichgültig. Das Ergebnis dieser Filterung wird in eine temporäre Datei geschrieben.

Diese Datei (%temp%\tmp.dat) wird dann von einer weiteren Schleife Zeile für Zeile gelesen, wobei die Angabe "tokens=3" dafür sorgt, dass nur jeweils das dritte Wort (die IP-Adresse) gelesen wird. Mit jedem gelesenen Wort wird nun das Label :output als Unterroutine angesprungen. Der übergebene Parameter stellt die IP-Adresse dar, die allerdings am Ende noch den Doppelpunkt der ping-Ausgabe trägt.

Antwort von 192.168.1.11: Bytes=32 Zeit<10ms TTL=128

Die drei Zeilen nach :output entfernen den Doppelpunkt und geben die IP-Adresse dann aus.

@echo off
setlocal
set network=192.168.1
echo Scanning ....
if exist %temp%\tmp.dat del %temp%\tmp.dat
(for /L %%f in (1,1,254) do @ping -n 1 %network%.%%f |
find /i "Antwort") > %temp%\tmp.dat
echo == Online sind folgende Rechner ==
for /F "tokens=3" %%f in (%temp%\tmp.dat) do @call
:output %%f
endlocal
goto :eof

:output
set wert=%1
set wert=%wert:~0,-1%
echo %wert%