l0c4lh0st
Goto Top

VB Script ausführen wenn die IP sich ändert

Guten Morgen,
so nachdem ich ja gestern mit godlie mein Script zum erfassen der Netzwerkumgebung gebastelt habe und es wunderbar funktioniert, kommt jetzt nochmal eine weitere Aufgabe, die ich alleine nicht zu lösen vermag.

Es geht darum, dass das Script von gestern immer ausgeführt werden soll wenn sich die IP Adresse ändert.

Frage ist nur: Wie bekomme ich raus ob sich die IP Adresse ändert? !und! wie kann ich das realisieren? Eine Dauerschleife würde sicher auf Kosten der Hardware bzw. Leistung gehen oder?

Die Programiersprache ist eigentlich egal aber VBS wäre von Vorteil. Es sollte nur ohne Benutzereingriffe und ohne Adminrechte startbar sein. Ebenfalls sollte keine bestimmt Umgebung dafür notwendig sein. Also soll es mit Windoof Bordmitteln lauffähig sein.

Zeitlich gesteuert also über den Taskplaner beispielsweise ist nicht optimal da es dann zu unflexibel ist.

Hoffe mal ihr könnt mir da helfen.
Ich hab da sowiso nicht so die Ahnung von^^ Bin eher der Hardware-Mensch xD

Danke schonmal
L0c4lh0sT

Content-Key: 113562

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

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: bastla
bastla 09.04.2009 um 10:42:47 Uhr
Goto Top
Hallo L0c4lh0sT!
Eine Dauerschleife würde sicher auf Kosten der Hardware bzw. Leistung gehen oder?
Wenn Du die Wartezeit zwischen den einzelnen Checks per "WScript.Sleep Dauer in ms" überbrückst, sollte das kein Problem sein ...

Grüße
bastla
Mitglied: L0c4lh0sT
L0c4lh0sT 09.04.2009 um 10:55:10 Uhr
Goto Top
Da haben wir dann aber wieder ne Abfrage die zu unflexibel ist weil sie eine Vordefinierte Zeit abläuft.

Gibt es da nicht soetwas wie ein Autorun oder Regeintrag der auf die Änderung der IP reagiert?
Ja ich weiß dafür ist es ein falsches Forum aber da ich selbst nicht weiß wie es zu realisieren ist...kann ja auch sein dass es mit VBS geht.


Mfg
L0c4lh0sT
Mitglied: colinardo
colinardo 09.04.2009 um 11:34:55 Uhr
Goto Top
Du kannst es mal mit folgendem Versuchen:
Das Script beobachtet den Registry-Key einer Netzwerkkarte und deren IP-Adresse, den musst du an deine Situtation anpassen.
Sobald sich dort der Key "IPAddress" ändert kommt es zu einem Event.

Set wmiServices = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\.\root\default")  

Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")   
 
wmiServices.ExecNotificationQueryAsync wmiSink, _ 
    "SELECT * FROM RegistryValueChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' " & _  
        "AND KeyPath='SYSTEM\\CurrentControlSet\\Services\\{2716E6B8-A329-4C09-B502-CAA1A36604CF}\\Parameters\\Tcpip' AND ValueName='IPAddress'"   
 
 
 
WScript.Echo "Listening for Registry Change Events..." & vbCrLf   
 
While(1) 
    WScript.Sleep 1000 
Wend 
 
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext) 
'Beispiel ausgabe // hier kann dann dein Script aufgerufen werden  
    WScript.Echo "Received Registry Change Event" & vbCrLf & _   
        wmiObject.GetObjectText_() 
End Sub
Mitglied: L0c4lh0sT
L0c4lh0sT 09.04.2009 um 11:48:09 Uhr
Goto Top
Schonmal ein guter Ansatz aber leider auch nicht das richtige...
Das Script soll auf ca. 3000 Rechnern ausgeführt werden. Und da ich hier dann einen Eintrag aus der Registry nehmen müsste, der auf jedem Rechner anders ist geht es so auch nicht.

Hätte vll. vorher die anzahl der PC's erwähnen sollen sry face-smile

MfG
L0c4lh0sT
Mitglied: godlie
godlie 09.04.2009 um 12:04:02 Uhr
Goto Top
Du hast interessante Aufgabenstellungen face-smile

Naja ich könnte mir denken das es evtl. über einen Service lösbar wäre.
Im Prinzip wäre das ein VBS Script welches nach der IP sieht diese speichert.
Beim nächsten Start wieder das gleiche macht, falls IP abweicht dann starte dies und das.

Ich glaube RunAsService könntest schon mal ins Auge fassen.

http://sourceforge.net/projects/runasservice/

Ob es einen EventTrigger für IP Adress Change gibt unter Windows glaube ich fast net.
Mitglied: L0c4lh0sT
L0c4lh0sT 09.04.2009 um 13:44:54 Uhr
Goto Top
Noch besser wäre es wohl nurnoch nach event id 4201 zu gehen.

Gibt es da ne möglichkeit?
Genau das ist nämlich der Event den ich brauche.
Allerdings als Information nicht als Error oder sonstiges...

MfG
L0c4lh0ST
Mitglied: colinardo
colinardo 09.04.2009 um 14:02:22 Uhr
Goto Top
Zitat von @L0c4lh0sT:
Noch besser wäre es wohl nurnoch nach event id 4201 zu gehen.

welche EventSource bzw. Quelle meinst du ? -- damit es eindeutig zugeordnet werden kann !
Dann muss das noch in die WQL Query mit eingebaut werden

strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate, (Security)}!\\" & _  
        strComputer & "\root\cimv2")  

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _    
    ("Select * from __instancecreationevent where " _  
        & "TargetInstance isa 'Win32_NTLogEvent' " _  
            & "and TargetInstance.EventCode = '4201' ")  

Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
     WScript.Echo objLatestEvent.TargetInstance.SourceName
Loop
Mitglied: L0c4lh0sT
L0c4lh0sT 05.05.2009 um 08:40:31 Uhr
Goto Top
Wow das hat super geklappt! Bin wirklich begeistert!

Jetzt muss ich nur noch mein anderes Script einbinden! Wunderbar!