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

Pingscript

Frage Entwicklung Batch & Shell

Mitglied: rique1me

rique1me (Level 1) - Jetzt verbinden

13.10.2008, aktualisiert 14.10.2008, 5241 Aufrufe, 18 Kommentare

Hallo, mein Ausbilder hat mir als Aufgabe gegeben, dass ich ein Script schreiben soll, in dem eine Liste von Rechnern angepingt werden.
Alle Rechner die nicht angepingt werden können, sollen dann in einer Textdatei stehen.

Die Liste der Rechner steht in einer Rechner.txt
Ich weiß nun nicht wie ich da ganz vorgehen soll.

Also ich habe so gut wie keine Ahnung im Bash.

Ich habe angefangen in der Rechner.txt überall ein ping vor zusetzen:

ping Rechner1
ping Rechner2
....

zursätzlich habe ich dann die Auswertung in eine extra Datei schreiben lassen

ping Rechner1 >>Protokoll.txt
ping Rechner2 >>Protokoll.txt
...

Ist das der Richtige Ansatz oder wie kann man das geschickter lösen?
Mitglied: Biber
13.10.2008 um 11:35 Uhr
Moin rique1me,
willkommen im Forum.

Also ich habe so gut wie keine Ahnung im Bash.
Also arbeitet ihr unter einem Unix-System und nicht unter Windows? Unter welchem?

Ich habe angefangen in der Rechner.txt überall ein ping vor zusetzen:
Lass die sinnvolle Trennung von "Programm" und "Daten" bestehen.
In der Rechner.txt sollten nur die Rechnernamen stehen, sonst nix.
zursätzlich habe ich dann die Auswertung in eine extra Datei schreiben lassen
Wie würdest Du den Unterschied zwischen "Auswertung" und "alles, was mir Ping.exe auf den Bildschirm schreibt" formulieren?

Ist das der Richtige Ansatz oder wie kann man das geschickter lösen?
Auf Oder-Fragen gibt es nur eine Antwort: natürlich!

Bitte nutze die interne Suchfunktion, nachdem Du nochmal überprüft hast, ob Du es unter Batch oder bash lösen willst.

Grüße
Biber
Bitte warten ..
Mitglied: rique1me
13.10.2008 um 11:42 Uhr
Hey danke für die schnelle Antwort:


Also wir sollen das unter Windows machen.

mit Batch-Dateien

Wie gesagt das Ziel ist es das eine Liste von Rechner angepingt wird.
Und die Rechner die nicht angepingt werden können, sollen in einer .txt-Datei gespeichert werden.
Bitte warten ..
Mitglied: Biber
13.10.2008 um 11:51 Uhr
Moin rique1me,

Danke für die schnelle Beantwortung der ersten zwei Fragen...
Wie gesagt das Ziel ist es das eine Liste von Rechner angepingt wird.
Die Sachverhalte, die ich glaubte verstanden zu haben, habe ich gar nicht nochmal angefragt..*gg

Hast Du meine anderen Nachfragen/Hinweise gelesen?
Die sollten Dich schon auf den richtigen Weg bringen...

ist doch sicher in Deinem Sinne, wenn Du hier Hilfe zur Lösung bekommst und nicht eine Fertig-Lösung, oder?

Grüße
Biber
Bitte warten ..
Mitglied: TuXHunt3R
13.10.2008 um 14:00 Uhr
In Batch (nicht getestet, schreibe es jetz kurz aus dem Kopf):

01.
@echo off 
02.
for /f %%a in (C:\yourfile.txt) do call :processline %%a 
03.
goto :eof 
04.
 
05.
:processline 
06.
echo Pinge %1 ... 
07.
ping -n 1 %1 | find /i "TTL" >nul 
08.
if errorlevel==0 ( 
09.
echo %1 pingbar! 
10.
) else ( 
11.
echo %1 
12.
echo %1 nicht pingbar! >>c:\pinglog.txt 
13.
)
In PowerShell (ebenfalls nicht getestet):
01.
function fcnPing ($geraet) { 
02.
$ping = Get-WmiObject win32_pingstatus -Filter "Address='$geraet'" 
03.
    if ($ping.statuscode -eq "0") { 
04.
       $ausgabe = $geraet + " pingbar!" 
05.
       write-host $ausgabe 
06.
    } else { 
07.
       $ausgabe = $geraet + " nicht pingbar!" 
08.
       write-host $ausgabe 
09.
       $ausgabe | out-file -filepath C:\pinglog.txt -encoding default -append 
10.
11.
12.
 
13.
foreach ($pc in get-content C:\yourfile.txt) {fcnPing $pc}
So.
Nun erwarte ich eine kurze Erklärung zumindest von einem der beiden Scripts in Pseudocode, damit der Lerneffekt gewährleistet ist.
Bitte warten ..
Mitglied: rique1me
13.10.2008 um 14:25 Uhr
Erstmal vielen Dank es läuft halbwegs.

Er sagt bei mir, dass alle Rechner anpingbar sind.

Dürfte aber nicht sein, da einige Rechner definitiv aus sind.
Bitte warten ..
Mitglied: TuXHunt3R
13.10.2008 um 15:04 Uhr
Welches hast du genommen?
Das Batchscript oder das in PowerShell?

Wenn du das Batchscript genommen hast, stimmt meine Errorlevel-Abfrage nicht.
Unter welchem Betriebsystem arbeitest du?
Die Errorlevel-Abfrage ist von OS zu OS unterschiedlich....


Versuchs mal so:
01.
if errorlevel 0 (
Oder so:
01.
if "%errorlevel%"=="0" (
Oder so:
01.
if %errorlevel%==0 (
Oder so:
01.
if %errorlevel%=0 (
PS: Hast du den Code verstanden? Ich will eine kurze Erklärung, was das Script genau macht ("Es pingt alle Clients in der Liste" reicht nicht).
Bitte warten ..
Mitglied: rique1me
13.10.2008 um 15:05 Uhr
also ich nutze Windows XP SP3

habe die Batch genommen:

so sieht das bei mir aus:


for /f %%a in (i:\test\Rechner.txt) do call :processline %%a

goto :eof

:processline

echo Pinge %1 ...

ping -n 1 %1 | find /i "TTL" >nul

if errorlevel==0 (

echo %1 pingbar! >>i:\test\pinglog.txt

) else (

echo %1 nicht pingbar! >>i:\test\pinglog.txt

)
Bitte warten ..
Mitglied: rique1me
13.10.2008 um 15:10 Uhr
es läuft jetzt mit der dritten version

vielen dank
Bitte warten ..
Mitglied: TuXHunt3R
13.10.2008 um 15:15 Uhr
Wie gesagt: Könntest du mir kurz beschreiben, was genau das Script macht? Du willst ja schliesslich was lernen und dein Lehrer könnte dir diese Frage ja auch stellen. Dann hättest du bereits eine gute Antwort....
Bitte warten ..
Mitglied: rique1me
13.10.2008 um 15:29 Uhr
Naja ich kann es mal versuchen.

also

for /f %%a in (i:\test\Rechner.txt) do call :processline %%a

bedeutet, dass ein Prozess (prozessline) in meiner Rechner.txt gestartet wird.

goto :eof

heißt, dass zum Ende der Datei gesprungen werden soll

:processline

ist ein verweis von dem for

echo Pinge %1 ...

ist eine ausgabe, die sagt, dass folgende rechner gepingt werden

ping -n 1 %1 | find /i "TTL" >nul

der erste teil ist der eigentliche pingbefehl. (Mit dem zweiten teil kann ich nicht wirklich was anfangen.

if "%errorlevel%"=="0" (
echo %1 pingbar! >>i:\test\pinglog.txt

wenn keine fehlermeldung kommt soll ausgegeben werden das der rechner pingbar ist.
das wird in der folgenden datei gespeichert.

) else (
echo %1 nicht pingbar! >>i:\test\pinglog.txt
)

ansonsten soll die meldung rechnerxyz nicht pingbar! in die pinglog.txt gespeichert werden


ist jetzt alles bisschen komisch erklärt aber wie gesagt, mach das jetzt zum ersten mal
Bitte warten ..
Mitglied: TuXHunt3R
13.10.2008 um 16:15 Uhr
War ja schon gar nicht schlecht. Zur Ergänzung/Berichtigung:

01.
for /f %%a in (i:\test\Rechner.txt) do call :processline %%a
Ist eigentlich eine Foreach-Schleife. Für jede Linie im Texfile Rechner.txt wird zum Sprungpunkt "processline" gesprungen. Dabei wird der Parameter %%a mitgegeben, was eine Variable ist, in der dein Rechnername aus dem Textfile mitgegeben wird.

01.
ping -n 1 %1 | find /i "TTL" >nul
Führt zuerst mal einen Ping aus. "-n 1" bedeutet, dass nur ein Ping-Paket geschickt wird.
Danach wird mit dem Befehl "find" in der Ausgabe des Pings nach der Zeichenfolge "TTL" gesucht. Dies darum, weil die Ausgabe "Antwort von ..." (also ein erfolgreicher Ping) die einzige Ausgabe von Ping ist, die die Zeichenfolge "TTL" drin hat. Die anderen möglichen Ausgaben von Ping ("Unknown Host", "Request Timed Out", "Destination Host Unreacheable") haben diese Zeichenfolge alle nicht drin. Kurz gesagt: Ist die Zeichenfolge "TTL" in der Ausgabe drin, war der Ping erfolgreich.
Das ">nul" sorgt dafür, dass für diesen Befehl keine Bildschirmausgabe ausgegeben wird.

Wenn nun also die Zeichenkette "TTL" gefunden wird (der Ping also erfolgreich war), generiert der find-Befehl einen Errorlevel mit dem Inhalt "0". Wenn diese nicht gefunden wird, generiert der find-Befehl einen Errorlevel mit dem Inhalt "1". Dann kommt die folgende Abfrage zum Zug:
01.
if errorlevel==0 (
So wird unterschieden, ob der PC nun pingbar ist oder nicht.

PS: Fürs erste Mal wars nicht schlecht....

PPS: Ich weiss, theoretisch könnte man mit dem Find-Befehl auch nach "Antwort" oder so etwas suchen. Das Script funktioniert dann aber nicht mehr, wenn du an einen Rechner kommst, auf dem ein anderssprachiges OS installiert ist. Mit der Suche nach der Zeichenfolge "TTL" funktioniert dein Script überall auf der Welt.
Bitte warten ..
Mitglied: miniversum
13.10.2008 um 18:27 Uhr
Nur als Anmerkung:
Das Find kann man auch ganz weglassen. Ein einfaches:
ping -n 1 %1 >nul
reicht auch. Der Ping-Befehl selbst gibt als Errorlevel 0 zurück wenn ein Pingversuch erfolgreich war und ein errorlevel ungleich 0 wenn er schief ging.
Bitte warten ..
Mitglied: TuXHunt3R
13.10.2008 um 21:32 Uhr
Das wusste ich nicht. War das unter Windows 2000 auch schon so? Dort habe ich nämlich gelernt zu batchen...
Bitte warten ..
Mitglied: miniversum
13.10.2008 um 22:32 Uhr
Keine Ahnung. aber bei xp ists so.
Auch das abfragen des errorlevels ist direkt ncith notwendig. Ein && bei erfolg (errorlevel 0) bzw. ein || bei einem andern erorlevel geht auch um Ding zu verknüpfen.
Da ginge also auch:
ping -n 1 %ip%>NUL && echo %ip% erreichbar
Bitte warten ..
Mitglied: bastla
14.10.2008 um 08:00 Uhr
@TuXHunt3R
War das unter Windows 2000 auch schon so?
Hätte so sein sollen, funktionierte aber nicht, und deshalb die Klimmzüge mit "find"/"findstr" ...

Grüße
bastla
Bitte warten ..
Mitglied: TuXHunt3R
14.10.2008 um 18:36 Uhr
@bastla

Na also, wusst ichs doch....
Bitte warten ..
Mitglied: miniversum
14.10.2008 um 20:07 Uhr
Also unter XP funktionierts auf jeden Fall (bei mir Zuhause zumindest)
Bitte warten ..
Mitglied: TuXHunt3R
14.10.2008 um 20:38 Uhr
@ miniversum

Das glaub ich dir schon, aber wie gesagt, ich habs unter Windows 2000 gelernt und habe es einfach so weiter verwendet....
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...