schnarchzapfen 10 Geschrieben 19. Januar 2006 Melden Teilen Geschrieben 19. Januar 2006 Hallo, weis zufällig jemand ob es einen VB-Befehl für ein WSH-Skript gibt der es ermöglicht festzustellen, ob ein entfernter (also ein anderer) Rechner im Netz erreichbar ist wie beispielsweise das absetzen eines "Pings"? Gruß an alle Schnarchzapfen Zitieren Link zu diesem Kommentar
grizzly999 11 Geschrieben 19. Januar 2006 Melden Teilen Geschrieben 19. Januar 2006 Reicht dir das hier? On Error Resume Next strTarget = "192.168.0.1" 'IP address or hostname Set objShell = CreateObject("WScript.Shell") Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget) strPingResults = LCase(objExec.StdOut.ReadAll) If InStr(strPingResults, "reply from") Then WScript.Echo strTarget & " responded to ping." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2") Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _ "Win32_ComputerSystem") For Each objCompSystem In colCompSystems WScript.Echo "Host Name: " & LCase(objCompSystem.Name) Next Else WScript.Echo strTarget & " did not respond to ping." End If Quelle: http://www.microsoft.com/technet/scriptcenter/topics/networking/03_atnc_remote.mspx grizzly999 Zitieren Link zu diesem Kommentar
varnik 10 Geschrieben 19. Januar 2006 Melden Teilen Geschrieben 19. Januar 2006 Reicht dir das hier? Quelle: http://www.microsoft.com/technet/scriptcenter/topics/networking/03_atnc_remote.mspx grizzly999 Komisch. Ich stelle eine pingbare Adresse ins Skript. aaa.bbb.ccc.ddd did not respond to ping Zitieren Link zu diesem Kommentar
grizzly999 11 Geschrieben 19. Januar 2006 Melden Teilen Geschrieben 19. Januar 2006 Ok, ich habe es ja nicht geschrieben :D Aber nachdem hier die Antwortausgabe ausgewertet wird: If InStr(strPingResults, "reply from") Then Sollte man "reply from" ersetzen durch "antwort von" Anm: Wegen LCase in zeile vorher: A in Anwort klein schreiben grizzly999 Zitieren Link zu diesem Kommentar
varnik 10 Geschrieben 19. Januar 2006 Melden Teilen Geschrieben 19. Januar 2006 OK! Und wie wäre es, die IP bzw. den Hostnamen als parameter zu übergeben? Zitieren Link zu diesem Kommentar
schnarchzapfen 10 Geschrieben 19. Januar 2006 Autor Melden Teilen Geschrieben 19. Januar 2006 Erst mal Danke für den Tipp. Mein Ziel ist es zwecks eines Ausfallsskripts ständig zu überprüfen ob ein bestimmter Server noch "online" ist. Wenn er das nicht mehr ist, dann soll ein weiteres Skript aufgerufen weren. Auf dem von dir vorgeschlagenen Weg kann ich das zwar realisieren und es funktioniert soweit auch ganz gut der große Nachteil ist halt nur, dass Windows ständig kurz ein neues schwarzes Dosfenster auf dem Bildschirm anzeigt, wenn der "Ping"-Befehl erneut innerhalb einer Schleife ausgeführt wird was natürlich sehr nervig ist. Gibt es da noch eine Möglichkeit das zu unterbinden, sodass das ganze Skript sozusagen im Hintergrund mitläuft. Zum besseren Verständnis werde ich mal meinen momentanen Quelltext posten, sodass sich jeder hier ein ungefähres Bild meines Vorhabens machen kann. <package> <job id="vbs"> <script language="VBScript"> dim IP,reboot,minuten,future,wshell,skriptname,objExec,strPingResults set wshell = CreateObject("WScript.Shell") IP="192.168.0.1" reboot = "00:00:00" minuten = 15 skriptname = "c:\SysProg\test.wsf" while(1) if (StrComp((Right(Now,8)),reboot,vbTextCompare))<>0 then set objExec = wshell.Exec("ping -n 2 -w 1000 " & IP) strPingResults = LCase(objExec.StdOut.ReadAll) If InStr(strPingResults, "anforderung") Then '==> also Ping-False wshell.run skriptname WScript.Quit End If set objExec = Nothing else future = DateDiff("n", Now, DateAdd("n", minuten , Now)) while(future<>0) WScript.Sleep 60000 future = future - 1 wend end if WScript.Sleep 1000 wend </script> </job> </package> Zitieren Link zu diesem Kommentar
grizzly999 11 Geschrieben 19. Januar 2006 Melden Teilen Geschrieben 19. Januar 2006 Frage: warum muss das per VBScript sein, und nicht mit sowas hier? http://www.paessler.com/ipcheck/features u.a. Freeware, die das kann .... grizzly999 Zitieren Link zu diesem Kommentar
schnarchzapfen 10 Geschrieben 19. Januar 2006 Autor Melden Teilen Geschrieben 19. Januar 2006 Nichts für ungut aber solche "kritischen" Programme bzw. Skripte die nachher auch 100%ig ihren Sinn und Zweck erfüllen müssen um einen Serverausfall kompensieren zu können programmiere ich lieber selber denn dann weis ich erstens was ich gemacht habe und zweitens wie alles funktioniert ohne mich auf eine Software Dritter verlassen zu müssen. Da bin ich nämlich schon so oft damit reingefallen. Nichts des zu trotz habe ich mich nun nochmals selbstständig etwas näher mit dem Thema beschäftigt und auch noch etwas gegoogelt und bin dabei u.a. auf die folgende Prozedur gestoßen mit der ich mein Vorhaben jetzt soweit realisieren konnte wie ich das gerne hätte. Zusätzlich habe ich noch eine "Funktion" eingebaut, die den Ping für die Zeit des nächtlichen Serverreboots aussetzt und das Skript sozusagen in eine Art "Schlafzustand" versetzt (vgl. Else-Zweig des Hauptprogramms). Ich poste im folgenden nun nochmals meinen fertigen Quelltext des Skripts für all diejenigen die es interessiert wie sich so etwas auch mittels WSH bzw. VB-Skript ohne den Einsatz von Drittsoftware realisieren lässt. <package> <job id="vbs"> <script language="VBScript"> Function IsConnectible(strComputer) 'Check if the remote machine is online. Dim objPing,objStatus Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._ ExecQuery("select Replysize from Win32_PingStatus where address = '" & strComputer & "'") For Each objStatus in objPing If IsNull(objStatus.ReplySize) Then IsConnectible=False Else IsConnectible = True End If Next Set objPing=Nothing Set objStatus=Nothing End Function dim IP,reboot,minuten,future,wshell,skriptname,objExec,strPingResults,SrvName set wshell = CreateObject("WScript.Shell") SrvName = "TestSrv" reboot = "00:00" minuten = 20 skriptname = "c:\SysProg\test.wsf" while(1) if (StrComp((Mid(Now,Len(Now)-7,5)),reboot,vbTextCompare))<>0 then If (IsConnectible(SrvName)=False) Then wshell.run skriptname WScript.Quit End If else future = DateDiff("n", Now, DateAdd("n", minuten , Now)) while(future<>0) WScript.Sleep 60000 future = future - 1 wend end if WScript.Sleep 1000 wend </script> </job> </package> Gruß an alle Schnarchzapfen Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.