camelidae
Goto Top

Per VBS die Ereignisanzeige auf ein bestimmtes Event hin überwachen?

Ist es möglich, die Ereignisanzeige (event log) von WinXP per VBScript zu überwachen, so dass bei der Einwahl eines VNC-Clients ein anderes Skript automatisch gestartet wird?
Beziehungsweise: ist es generell möglich, ein VBScript als Service zu starten, das dann permanent den EventLog auf einen bestimmten Event überwacht?
Wie müsste so etwas denn grob aussehen?
Bis jetzt ist es mir nur gelungen, gezielt durch den Start eines VBScripts die dann schon vorhandenen Logs nach bestimmten Ereignissen zu durchsuchen. Wie ich allerdings ein permanentes Monitoring umsetze ist mir bis jetzt leider nicht klar.
Ich würde mich sehr freuen, wenn jemand mir dabei auf die Sprünge helfen könnte.
Vielen Dank!

Content-Key: 139449

Url: https://administrator.de/contentid/139449

Printed on: April 23, 2024 at 16:04 o'clock

Member: TsukiSan
TsukiSan Mar 30, 2010 at 01:06:10 (UTC)
Goto Top
Hallo Camelidea,

ohne dein exisitierendes Script zu kennen, gäbe es Möglichkeiten, ein VBS für eine bestimmte Zeit
am Laufen zu halten.
Du kannst das VBS aus einer Batch-Datei endlos aufrufen
:Start
call meine.vbs //nologo >>MeineTextDatei.txt
goto Start
Das gäbe dir im Falle, wenn du in deinem VBS zum Beispiel Meldungen mit WSCRIPt.ECHO
ausgibst, die Daten in eine Textdatei aus.
Oder du baust dir eine Schleife in dein VBS ein und allen restlichen Code
legst du dir in eine Subroutine.
Beispiel:
for i = 1 to 60  
	MeineSub
	Wscript.Sleep 1000 ' für 1000ms "schlafen"  
next

Sub MeineSub()
        'Dein ganzer Code  
EndSub
Aber sicher gibt es noch mehrere Möglichkeiten. Das könnte man diskutieren, wenn man dein VBS näher kennen würde.
Dann kann man die eleganteste Variante auswählen.
Eventuell ist ja schon eine von meinen beiden Möglichkeiten die Richtige für dich.

Gruss
Tsuki
Member: Tommy70
Tommy70 Mar 30, 2010 at 04:35:47 (UTC)
Goto Top
Auch Hallo!

Ja, ist möglich. Mittels instsrv.exe und srvany.exe kannst du ein Script als Dienst laufen lassen. Hier unter USBsecure findest du ein Beispiel wo es so gemacht wird.
Allerdings ist für deine Aufgabe wohl eher ein Trigger den du mittels Eventtriggers erstellen kannst die bessere Wahl.
Member: Camelidae
Camelidae Mar 30, 2010 at 18:40:49 (UTC)
Goto Top
Hallo!

Vielen Dank euch Zweien für die Antworten!

Ich fang mal oben an.


@tsuki:

Mein Skript durchsucht momentan bei Ausführung sämtliche EventLogs auf Einträge, die bestimmte Paramter aufweisen.
Aus diesen liest er dann eine bestimmte Information (IP-Adresse) aus.

Set objWMIService = GetObject("winmgmts:" & "\\" & strComputer & "\root\cimv2")  

Set colLoggedEvents = objWMIService.ExecQuery ("Select * from Win32_NTLogEvent Where EventType='3' and SourceName='WinVNC4'")  


test = 0

For Each objEvent In colLoggedEvents
  if test < 1 then
    last_Message = objEvent.Message
  end if
  if InStr(lcase(objEvent.Message), "connections") then  
    test3 = split(objEvent.Message)
    test4 = split(test3(2),"::")  
  end if

Next

Momentan wie gesagt durchsucht er noch alle eventlogs - da werde ich noch eine Zeitabfrage einbauen. Ansonsten kriege ich nämlich immer die älteste IP geliefert und ich will ja eigentlich die neueste bzw aktuelle.
(Danach folgen noch ein paar Kleinigkeiten, die aber hier jetzt nicht von Bedeutung sind. Bei gefundener IP wird dann ein weiteres Skript ausgeführt.)
Deshalb war auch die Frage, ob ein Skript möglich wäre, das immer nur auf aktuelle Änderungen reagiert. Also Richtung Monitoring.

So, jetzt mal unter dem Gesichtspunkt, dass ich das mit 'nur die aktuellen Einträge lesen' hinbekomme (wie auch immer :/ ):

Das mit der Batch-Datei hört sich ganz gut an. Kann ich allerdings diese Dauerschleife abbrechen, wenn ich eine IP gefunden habe? Also kann ich einen Stop-Befehl von VBS zu Batch zurücksenden? Weil ansonsten läuft diese Abfrage ja weiter bis im Prinzip der PC abgeschaltet wird. Und das ist nicht nötig. Sobald eine IP gefunden wurde, brauch ich dieses EventLogs-durchsuchen eigentlich nicht mehr.

Zur anderen Version: Hier werde ich eventuell ein Problem kriegen, weil die Schleife ja nicht dauerhaft läuft sondern nur eine bestimmte Anzahl an Durchläufen macht. Ich kann aber im Voraus nicht bestimmen, wie lange es dauert, bis sich wirklich jemand per VNC einwählt. Wenn ich die Anzahl der Durchläufe hochsetze, ist das halt leider noch keine Garantie, dass das Event innerhalb dieser Durchläufe erfolgt.
Andererseits könnte man hier abfangen, falls sich zu lange niemand einwählt.


@Tommy:

Danke für den Hinweis auf die zwei *.exe. Beim Microsoft Support ist dort WinXP allerdings nicht vermerkt. Trifft das auf XP trotzdem zu, oder verdreh ich da gerade etwas?
Wie meinst du das mit dem Eventtrigger?

Danke nochmal!
Gruss,
Camelidae
Member: TsukiSan
TsukiSan Mar 30, 2010 at 23:00:47 (UTC)
Goto Top
Hallo Camelidea,

Wenn die VBS das erste Mal startet, ließ dir alle vorhanden IPs erst einmal ein (vielleicht in ein array).
danach läßt du dein VBS "im Kreis" laufen mit einer Zeit von 1 oder aller 10 Sekunden oder was
am besten sinnhaft ist. Die Taktzeit kannst du einstellen über den
Wscript.Sleep
in Millisekunden.

Beispiel:
Dim MeineIPs(254)
Set objWMIService = GetObject("winmgmts:" & "\\" & strComputer & "\root\cimv2")  

Set colLoggedEvents = objWMIService.ExecQuery ("Select * from Win32_NTLogEvent Where EventType='3' and SourceName='WinVNC4'")  


test = 0
I = 0

For Each objEvent In colLoggedEvents
  if test < 1 then
    last_Message = objEvent.Message
  end if
  if InStr(lcase(objEvent.Message), "connections") then  
    test3 = split(objEvent.Message)
    test4 = split(test3(2),"::")  
    MeineIPs(I) = test4(1)
   I = I+1
  end if

Next

For I = 1 to 4320 ' 43200s = 12h  
  PruefeIP
  Wscript.Sleep 10000 'alle 10 Sekunden weiter  
next 

Sub PruefeIP()

test = 0
I = 0

For Each objEvent In colLoggedEvents
  if test < 1 then
    last_Message = objEvent.Message
  end if
  if InStr(lcase(objEvent.Message), "connections") then  
    test3 = split(objEvent.Message)
    test4 = split(test3(2),"::")  
     If   MeineIPs(I) = test4(1) then
        ' nichts machen  
     Else
        ' weitere Anweisungen  
        MeineIPs(I) = test4(1)
        I = I+1
    End If
  end if

End Sub
Das ist ungetestet! Aber so ähnlich könnte der Aufbau sein. In diesem Beispiel würde der
VBS-Schnipsel über 12 Stunden laufen.
Dann müßte man sich nur noch einen "Sprung nach draußen" bauen, sprich, wie du das Script jeder Zeit beenden kannst.
Der "Affengriff" geht immer und unter den Prozessen stoppst du einfach "wsrcipt.exe"

Hoffe, erst einmal etwas weitergeholfen zu haben.

Gruss
Tsuki
Member: Tommy70
Tommy70 Mar 31, 2010 at 04:26:29 (UTC)
Goto Top
Zitat von @Camelidae:
@Tommy:

Danke für den Hinweis auf die zwei *.exe. Beim Microsoft Support ist dort WinXP allerdings nicht vermerkt. Trifft das auf XP
trotzdem zu, oder verdreh ich da gerade etwas?
Wie meinst du das mit dem Eventtrigger?

Danke nochmal!
Gruss,
Camelidae

Hallo,

ja, die 2 Exe funktionieren auch unter XP. Habe das schon mehrfach verwendet.
Eventtriggers ist genau das was du suchst. Du musst dann nicht mehr das Eventlog durchsuchen. Mit Eventtriggers kannst du einen Trigger auf ein vordefiniertes Event setzen.
Tritt dieses Event dann ein, dann wird von Eventtriggers automatisch die vorher definierte Aktion ausgeführt.
Beispiele:
Setzen eines Triggers: eventtriggers /create /eid 7 /tr EventID7 /ru NAME /rp PASSWORT /tk "C:\Temp\Eventtriggers\mail.cmd"
Alle Trigger wieder löschen: eventtriggers /delete /TID *


Hier steht noch etwas mehr. Sonst hilft dir Google auch weiter.