Jump to content
Sign in to follow this  
schnarchzapfen

Ping per WSH-Skript auf entfernten Rechner absetzen

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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>

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...