netgearsdk
Goto Top

VBScript, je nach IP Adresse etwas tun

Hallo zusammen,

wie ist es möglich mit vbscript zuerst einmal die eigene IP adresse abzufragen und anschliessend je nach IP-Range das tun was dort definiert ist. Welche befehle muss ich kennen?

sollte ungefähr so aussehen:

IP 192.168.25.
IP 192.168.50.
IP 192.168.75.
IP 192.168.100.


Wenn meine IP Adresse 192.168.25.7 ist sollte er
->das
->und das
->und das
machen

Wenn meine IP Adresse 192.168.50.92 ist sollte er
->das
->und das
->und das
machen

Wenn meine IP Adresse 192.168.75.33 ist sollte er
->das
->und das
->und das
machen

Vielen Dank bereits im Voraus!

Content-Key: 203414

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

Printed on: April 26, 2024 at 15:04 o'clock

Member: SarekHL
SarekHL Mar 15, 2013 updated at 20:01:02 (UTC)
Goto Top
Schau Dir das mal an: http://www.activexperts.com/admin/scripts/wmi/vbscript/0340/
Die IP-Adresse findest Du dann in objItem.IPAddress, und die kannst Du dann ja in einer If-Then-Konstruktion verwenden ...
Member: rubberman
rubberman Mar 15, 2013 updated at 21:55:27 (UTC)
Goto Top
Hallo Zusammen.

Der Link von Sarek scheint schon etwas älter zu sein. Mittlerweile bekommst du so ein Array mit IPv4 und IPv6 Adresse.
Teste mal, ob das für dich funktioniert:
Option Explicit
Dim colItems, oItem, aIP

Set colItems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery( _  
  "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE NOT MACAddress = '' AND IPEnabled = TRUE", "WQL", 48)  

For Each oItem In colItems
  If IsArray(oItem.IPAddress) Then
    aIP = Split(oItem.IPAddress(0), ".")  
  Else
    aIP = Split(oItem.IPAddress, ".")  
  End If
Next

If IsArray(aIP) Then
  Select Case aIP(0) & "." & aIP(1) & "." & aIP(2)  

    Case "192.168.25"  
      WScript.Echo "1"  

    Case "192.168.50"  
      WScript.Echo "2"  

  End Select
End If

Die WScript.Echo Zeilen ersetzt du entsprechend durch deinen Code und ergänzt die fehlenden Case Anweisungen.

Grüße
rubberman
Member: netgearsdk
netgearsdk Mar 17, 2013 updated at 14:24:39 (UTC)
Goto Top
Hallo @rubberman

Vielen Dank für deine Antwort.

Es scheint jedoch so, dass er die Falsche IP Adresse nimmt:

Drahtlos-LAN-Adapter Drahtlosnetzwerkverbindung:

Verbindungsspezifisches DNS-Suffix: -
Verbindungslokale IPv6-Adresse . : -
IPv4-Adresse . . . . . . . . . . : 192.168.1.106
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : 192.168.1.1

Ethernet-Adapter LAN-Verbindung* 2:

Medienstatus. . . . . . . . . . . : Medium getrennt
Verbindungsspezifisches DNS-Suffix:


Ethernet-Adapter VirtualBox Host-Only Network:

Verbindungsspezifisches DNS-Suffix:
Verbindungslokale IPv6-Adresse . : -
IPv4-Adresse . . . . . . . . . . : 192.168.56.1
Subnetzmaske . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . :


Er nimmt die 192.168.56 IP Adresse aus der VirtualBox Network IP.
Wie kann ich das verhindern?
Ist es z.B. Möglich die IP Adresse vom Drahtlos-LAN-Adapter zu beziehen?
Member: rubberman
rubberman Mar 17, 2013 at 23:10:09 (UTC)
Goto Top
Hallo netgearsdk,

an was willst du das fest machen? Am Name (oder einem Teil davon), am vorhandenen Standardgateway oder an der ersten gefundenen IP Adresse? Alles möglich, aber definieren musst du das vorher. Mit der Umsetzung kann ich behilflich sein.

Grüße
rubberman
Member: netgearsdk
netgearsdk Mar 18, 2013 at 21:40:44 (UTC)
Goto Top
Hallo @rubberman

Ich möchte anhand der IP Adresse Entscheide treffen.
Anhand der IP Adresse finde ich heraus an welchem Subnetz der jeweiliger Rechner ist. So bringt es mir den Vorteil, die Rechner am naheliegesten Server zu lenken um damit schnellere Datentransfers zu erledigen.
Das Problem ist jedoch, wenn der Rechner einen Ethernet-Adapter VirtualBox installiert hat, wie meiner, dann nimmt der Script automatisch diese IP Adresse. Dies möchte ich natürlich verhindern.
Er sollte natürlich vom die IP Adresse der LAN-Verbindung einlesen und keine andere.
Ich hoffe Du siehst meine Problematik und kannst mir weiterhelfen.

Danke Dir ganz herzlich bereits im Voraus
LG
Member: rubberman
rubberman Mar 18, 2013 at 23:02:13 (UTC)
Goto Top
Hallo netgearsdk,

ich hatte dich schon verstanden. Meine Frage an dich war, welche Eigenschaft / welcher Wert infrage kommt, um die richtige IP Adresse zu selektieren. Ein paar Möglichkeiten hatte ich dir schon genannt.

Gehen wir mal davon aus, dass der Name immer die Zeichenfolge "LAN" enthält, dann könntest du die Zeile 5 in meinem Code durch folgende ersetzen:
  "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE NOT MACAddress = '' AND IPEnabled = TRUE AND Description LIKE '%LAN%'", "WQL", 48)
Ob das allerdings ausreicht, um sicher von anderen Netzwerkadaptern abzugrenzen und ob der gesuchte Netzwerkadapter immer die Zeichenfolge "LAN" enthält, kannst nur du wissen. Darum war meine Bitte, das Unterscheidungskriterium vorab zu definieren.

Grüße
rubberman
Member: netgearsdk
netgearsdk Mar 19, 2013 updated at 13:28:18 (UTC)
Goto Top
Hallo @rubberman

Ich suche die IP Adresse von der LAN Adapter. Doch irgendwie kann ich aufeinmal keine IP Adresse mehr auslesen, wenn ich -> Description LIKE '%LAN%' noch hinzufüge.
Doch ich habe eine Idee. Und zwar bei der abfrage

  For Each oItem In colItems
  If IsArray(oItem.IPAddress) Then
	aIP = Split(oItem.IPAddress(0), ".")  
  Else
    aIP = Split(oItem.IPAddress, ".")  
  End If
  Next

In dieser For Each Schleife wird die Variable aIP zuerst mit der IP Adressen 192.168.1.106(IP von LAN Netzwerkadapter) befüllt und daraufhin wird die aIP Variable überschrieben. Und zwar mit der IP Addresse 192.168.56.1(IP von Virtualbox Netzwerkadapter).
Ist es möglich die Werte, welche in diese For Each schleife fallen als ein Array zu speichern und ausserhalb dieser For Each Schleife im Code wieder zu verwende?
Also er sollte einfach in diese For Each Schleife fallenden Werte als ArrayXYZ speichern und dann für jedes Elemente im ArrayXYZ einmal diesen Coden unten ausführen.


If IsArray(aIP) Then
  Select Case aIP(0) & "." & aIP(1) & "." & aIP(2)  

  
    Case "192.168.25"  
    'blablabl        

    Case "192.168.50"  
    'blablabl  

  'End Select  
End If

Vielen Dank bereits im Voraus
LG
Member: rubberman
rubberman Mar 19, 2013 at 18:21:02 (UTC)
Goto Top
Hallo netgearsdk.

Doch irgendwie kann ich aufeinmal keine IP Adresse mehr auslesen, wenn ich -> Description LIKE '%LAN%' noch hinzufüge.
OK, "Description" ist nicht "Name" und auch nicht "Caption". Diese Eigenschaften existieren aber leider nicht in der Win32_NetworkAdapterConfiguration Klasse. Von daher ist es durchaus möglich, dass der Teilstring "LAN" gar nicht vorkommt. Das hättest du dir aber mal anzeigen lassen und entsprechend ändern können.

Ist es möglich die Werte, welche in diese For Each schleife fallen als ein Array zu speichern und ausserhalb dieser For Each Schleife im Code wieder zu verwende?
Klar ist das möglich. Aber warum ein zusätzliches Array? Packe den Code doch einfach direkt mit in die Schleife.

Option Explicit
Dim colItems, oItem, aIP

Set colItems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery( _  
  "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE NOT MACAddress = '' AND IPEnabled = TRUE", "WQL", 48)  

For Each oItem In colItems
  If IsArray(oItem.IPAddress) Then
    aIP = Split(oItem.IPAddress(0), ".")  
  Else
    aIP = Split(oItem.IPAddress, ".")  
  End If

  If IsArray(aIP) Then
    Select Case aIP(0) & "." & aIP(1) & "." & aIP(2)  

      Case "192.168.25"  
        WScript.Echo "1"  

      Case "192.168.50"  
        WScript.Echo "2"  

    End Select
  End If
Next

Grüße
ruberman
Member: netgearsdk
netgearsdk Mar 22, 2013 at 13:38:02 (UTC)
Goto Top
Hallo @rubberman

Vielen Dank für deine Antwort!

Ja, das habe ich mir auch überlegt, jedoch war ich mir unsicher dies zu tun, weil schlussendlich der Case diverse IF Befehle und For Each Schleifen beinhaltet wird.
Doch ich werde es so umsetzen, wie du es gesagt hast.

Noch kurz eine Frage zu deiner 'Informationsbeschaffungstechnik'.
Wie zeigst du dir die Informationen der Klasse Win32_NetworkAdapterConfiguration an? Ich kann dir sagen wie ich vorgehe; ich gebe die Klasse im Google z.B. Win32_NetworkAdapterConfiguration Klasse ein und versuche da bei der erstmöglichen Link die Eigenschaften oder Methoden zu finden.
Jedoch ist es bisschen umständlich das zu finden was man sucht. Denn man stösst unter anderem auf Links wie diese: http://www.scriptinternals.de/new/ger/support/Internal/WMI_Win32_Networ ...
Eventuell hast du eine andere / angenehmere Technik, die du mir verraten kannst.


Danke für deine Hilfe!
Member: rubberman
rubberman Mar 22, 2013 at 18:39:24 (UTC)
Goto Top
Hallo netgearsdk.

Für das Anzeigen der Informationen ist der Link von Sarek recht gut geeignet. Du kannst dort bereits mit WHERE einschränken und musst berücksichtigen, dass du statt auf Eigenschaft .IPAddress auf .IPAddress(0) verweisen musst. Du kannst das Script auch entsprechend einkürzen und nur das anzeigen lassen, was dich interessiert. Ansonsten hilft ein
On Error Resume Next
am Anfang des Scripts um Fehlermeldungen zu unterdrücken und es weiter laufen zu lassen.

Wo ich meine Informationen beziehe? Ich mache das nicht wesentlich anders als du. Wenn ich gezielt die Doku benötige, dann nehme ich gerne die Hilfe des Urhebers in Anspruch, indem ich bei der Suche ein "msdn" voran stelle. Das führt dich dann direkt zu dieser Seite face-wink

Grüße
rubberman