Jump to content

Ping per WSH-Skript auf entfernten Rechner absetzen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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>

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...