larty81
Goto Top

string in array suchen

Hallo,

ich habe mir folgendes zusammen gebaut um aus einem array einen string der die ip adresse eines bestimmten adapters enthält auszulesen, vorher setze ich noch die bedingung dass diese ip aus einem bestimmten adressbreich kommt:


Set objNetwork = WScript.CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName

On Error Resume Next

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

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

Set colItems = objWMIService.ExecQuery("SELECT IPAddress " & _
"FROM Win32_NetworkAdapterConfiguration " & _
"WHERE IPEnabled=TRUE")

For Each objItem In colItems
If Not IsNull(objItem.IPAddress) Then
For i = LBound(objItem.IPAddress) To UBound(objItem.IPAddress)
if objItem.IPAddress(i) like "172.16." Then
WScript.Echo("IP-Adresse: " & objItem.IPAddress(i) & " gefunden.")
else WScript.Echo("No Match.")
end if
next
End if
Next


nun meine frage: warum bekommen ich immernoich die ausgabe "IP-Adresse: 172.16.irgendwas gefunden" auch wenn ich den adressbereich ändere, meinetwegen auf "if objItem.IPAddress(i) like "232.16."" setze?


bin noch absoluter vbs noob, kann es daher nich wirklich nachvollziehen, sorry

danke schonmal im voraus!

Content-Key: 99928

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

Printed on: April 20, 2024 at 13:04 o'clock

Member: bastla
bastla Oct 22, 2008 at 10:26:33 (UTC)
Goto Top
Hallo larty81 und willkommen im Forum!

nun meine frage: warum bekommen ich immernoich die ausgabe "IP-Adresse: 172.16.irgendwas gefunden" auch wenn ich den adressbereich ändere, meinetwegen auf "if objItem.IPAddress(i) like "232.16."" setze?
Die Antwort erhältst Du, wenn Du "On Error Resume Next" entfernst (was während der Testphase eines Scripts generell anzuraten ist).

Du wirst dann auf den Fehler in Zeile 18 hingewiesen (BTW: wenn Du -Formatierung verwendest, lässt sich in Deinem geposteten Script die Zeile 18 leichter finden) - VBScript kennt nämlich kein "Like". Anstelle dessen kannst Du InStr() oder Left() verwenden.

Eine Alternative zur "Vergleichs"-Schleife könnte übrigens so aussehen:
For Each objItem In colItems
    If Not IsNull(objItem.IPAddress) Then
        If InStr(Join(objItem.IPAddress), "192.168.") > 0 Then  
            WScript.Echo("IP-Adresse: " & objItem.IPAddress(i) & " gefunden.")  
        Else
            WScript.Echo("No Match.")  
        End If
    End If
Next
Grüße
bastla
Member: larty81
larty81 Oct 23, 2008 at 13:13:03 (UTC)
Goto Top
vielen Dank für die schnelle Hilfe!! bin soweit auch ordentlich vorwärts gekommen..

Set objNetwork = WScript.CreateObject("WScript.Network")  
strComputer = objNetwork.ComputerName

On Error Resume Next

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20



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

   Set colItems = objWMIService.ExecQuery("SELECT IPAddress " & _  
        "FROM Win32_NetworkAdapterConfiguration " & _  
        "WHERE IPEnabled=TRUE")  
		
   Set colItems1 = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter Where NetConnectionStatus = 2")	  

For Each objItem In colItems 
    If Not IsNull(objItem.IPAddress) Then 
        If InStr(Join(objItem.IPAddress), "172.16.") > 0 Then   
            WScript.Echo("IP-Adresse: " & objItem.IPAddress(i) & " gefunden.")  
            For Each objItem1 in colItems1
             if objItem1.NetConnectionID = "LAN-Verbindung" and InStr(Join(objItem.IPAddress), "172.16.") > 0   then   
               MsgBox "Verbindungsname = LAN-Verbindung"  
             else
                  msg = "NW-Verbindung in LAN-Verbindung umbenennen?"     
                  title = "NW-Verbindung umbenennen"  
                  If MsgBox(msg, 4, title) = vBYes Then   
                  lanvar = "netsh interface set interface name = " & objItem1.NetConnectionID  & " newname = LAN-Verbindung {Enter}"   
                  set ws = CreateObject("Wscript.shell")   
                  ws.sendkeys(lanvar)
                  MsgBox "Verbindung in LAN-Verbindung umbenannt"  
                Else
                  MsgBox "Abbruch durch Benutzer"  
                End If

             end if   
            Next
        Else 
            WScript.Echo("Keine passende IP gefunden.")   
        End If
		
    End If 
Next

nur: warum wird die lan-verbindung unter win2000 nicht umbenannt, sonder nur die meldung "Verbindungsname = LAN-Verbindung"? unter xp funkt das script wie es soll.

wenn ich "On Error Resume Next" auskommentiere bekomm ich nen fehler in zeile 23 angezeigt mit dem fehlercode "0x80041017"


kann es daran liegen dass ich zwei verschiedene klassen abfrage?! hab nur ne ahnung, keinen wirklichen plan... help pls!
Member: larty81
larty81 Oct 30, 2008 at 09:51:26 (UTC)
Goto Top
hab rausgefunden das viele probleme dabei haben unter win2k die Eigenschaft "NetConnectionStatus" aus der Klasse "Win32_NetworkAdapter" in der query auszulesen, es soll sich durch einen syntax-fehler in der query bemerkbar machen - das tut es auch in meinem script, aber wie gesagt eben nur unter win2k.

hat jemand mal was davon gehört bzw weiß was man dagegen machen kann? ohne den ConnectionStatus ist das gesamte script hinfällig...
Member: bastla
bastla Oct 30, 2008 at 10:05:40 (UTC)
Goto Top
Hallo larty81!

Hierher verirrt sich vermutlich kaum jemand (außer uns beiden face-wink)- Du solltest daher besser einen neuen Thread zum Thema "ConnectionStatus" eröffnen - auch, weil ich leider dazu auch keine Idee habe face-sad ...

Grüße
bastla