An die Netzwerkprofis - Skript gesucht
Geizhals » Forum » Netzwerk » An die Netzwerkprofis - Skript gesucht (7 Beiträge, 222 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.
Re: An die Netzwerkprofis - Skript gesucht
25.04.2008, 15:21:00
Hi!

Sollte an sich recht einfach mit einem WMI-Script zu lösen sein; ich hab da auf die Schnelle mal folgendes gebastelt:

Dim sHost		
Dim sTarget		
Dim cPingResults	
Dim oPingResult		
Dim sService
Dim cService
Dim oService
Dim iInterval

sHost = "."
sTarget	= "192.168.0.1"
sService = "Messenger"
iInterval = 1000

Do
Set cPingResults = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
		sHost & "/root/cimv2"). ExecQuery("SELECT * FROM Win32_PingStatus " & _
		"WHERE Address = '" + sTarget + "'")

  For Each oPingResult In cPingResults
  	If oPingResult.StatusCode = 0 Then
                Set cService = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
		               sHost & "/root/cimv2"). ExecQuery("SELECT * FROM Win32_Service " & _
                               "WHERE Name = '" + sService + "'")
                   For Each oService In cService
                       If oService.Started = False Then oService.StartService
                   Next
  	Else
                Set cService = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
		               sHost & "/root/cimv2"). ExecQuery("SELECT * FROM Win32_Service " & _
                               "WHERE Name = '" + sService + "'")
                   For Each oService In cService
                       If oService.Started = True Then oService.StopService
                   Next

  	End If
  Next
  Wscript.Sleep iInterval
Loop

Credits:
http://www.enterpriseitplanet.com/networking/features/article.php/1571771
http://www.computerperformance.co.uk/vbscript/wmi_services.htm


Speicher das als .vbs-Datei ab und lass es laufen.
Das Script checkt jede Sekunde, ob es ein Reply gibt; wenn nicht, dann wird ein Dienst gestoppt (falls er vorher gestartet war), und falls schon wird der Dienst gestartet (wenn er vorher beendet war).

Du musst halt nur IP Addesse und Service Name (Achtung: CAse sEsitIve!) tauschen.
Da ließe sich dann auch noch ein Eintrag im Event Log mitschreiben, wäre noch ein WMI Aufruf mehr.

Gibt sicher schönere Varianten, wie zB. Netzwerkmonitoring Tools und zweifellos auch bessere Scripts, aber das tut schon mal, was Du möchtest.

Ein Hinweis noch: das Script läuft so lange, bis der Rechner neu gestartet wird. Falls Du es vorher beenden möchtest musst Du den Prozess "cscript.exe" (bzw. "wscript.exe", je nach Aufruf) mit der Hand beenden.

hth,

greetz

glockman B-)

- I don't need any sex. Life screws me every day... -
It's a Thing...
You wouldn't understand.

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
...
Re(3): An die Netzwerkprofis - Skript gesucht
28.04.2008, 12:23:53
Warum hab ich DAS nur kommen sehen ;-)


Dim sHost
Dim sTarget
Dim cPingResults
Dim oPingResult
Dim sService
Dim cService
Dim oService
Dim iInterval
Dim iFailCount
Dim iCount
Dim oShell
Dim sEventDesrciption

Const EVENT_WARNING = 2
Const EVENT_INFORMATIONAL = 4

sHost = "."
sTarget	= "192.168.0.1"
sService = "Messenger"
iInterval = 1000
iFailCount = 60
iCount = 0

Do
Set cPingResults = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
		sHost & "/root/cimv2"). ExecQuery("SELECT * FROM Win32_PingStatus " & _
		"WHERE Address = '" + sTarget + "'")

  For Each oPingResult In cPingResults
  	If oPingResult.StatusCode = 0 Then
            Set cService = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
		               sHost & "/root/cimv2"). ExecQuery("SELECT * FROM Win32_Service " & _
                           "WHERE Name = '" + sService + "'")
            For Each oService In cService
                If oService.Started = False Then
                    Set oShell = CreateObject("WScript.Shell")
                    sEventDescription = "Ping recovered after " & iCount & " ping failures, starting service " & sService
                    oShell.LogEvent EVENT_INFORMATIONAL, sEventDescription
                    oService.StartService
                    Set oShell = Nothing
                End If
            Next
            iCount = 0
            Set cService = Nothing
  	Else
            iCount = iCount + 1
            If iCount = iFailCount Then
                Set oShell = CreateObject("WScript.Shell")
                sEventDescription = "Maximum failed ping replies reached, stopping service " & sService
                oShell.LogEvent EVENT_WARNING, sEventDescription
                Set cService = GetObject("winmgmts:{impersonationLevel=impersonate}//" & _
    		               sHost & "/root/cimv2"). ExecQuery("SELECT * FROM Win32_Service " & _
                               "WHERE Name = '" + sService + "'")
                For Each oService In cService
                    If oService.Started = True Then oService.StopService
                Next
                Set cService = Nothing
                Set oShell = Nothing
            End If
  	End If
  Next
  WScript.Sleep iInterval
Loop


Was ist neu:
- "iFailCount" gibt an, nach wie vielen Fehlversuchen der Dienst beendet wird (das müssen NICHT unbedingt Sekunden sein, das Script braucht auch ein wenig Zeit zum arbeiten/laufen). Also mehr Pi*Auge in Sekunden

- ich lass jetzt auch noch einen Eintrag ins Event Log schreiben, wenn der Dienst beendet und wieder gestartet wird.
Anwendungsprotokoll, Quelle = WSH, Event ID 2 bei Fehler und Event ID 4 bei Neustart.
Der Text, der im Event stehen soll ist frei wählbar, Du musst nur "sEventDescription" anpassen.

Wie schon vorher gesagt gilt auch hier: funktioniert, aber eben nicht so toll/professionell wie andere Tools.
Sollte das Script aus irgendwelchen Gründen mal abstürzen, nicht immer das tun was es soll oder Deinen Rechner zur Verzweiflung bringen bin ich für nichts haftbar ;-)

greetz

glockman B-)

- I don't need any sex. Life screws me every day... -
It's a Thing...
You wouldn't understand.

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung