Kenny Bones Skrevet 13. januar 2009 Del Skrevet 13. januar 2009 (endret) Hei, jeg lurer på om noen her har peiling på å effektivisere og forenkle dette vbscriptet? Jeg har bare mekket sammen noe som jeg vet fungerer, men jeg tviler sterkt på at det er særlig effektivt: Edit: Vet jeg kan bruke Select Case, men er litt usikker på hvordan fremgangsmåten da blir? Option Explicit Dim IP_Address : IP_Address = GetIP() If kuttet = "0.0.0.0" OR IP_Address = "" Then InputBox vbcrlf & "Du har ingen tilkobling " & IP_Address & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", IP_Address ElseIf kuttet = "192.168." Then InputBox vbcrlf & "Du er koblet til et privat nettverk." & vbcrlf & "Din IP-adresse er:" & IP_Address & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", IP_Address ElseIf kuttet = "169.254." Then InputBox vbcrlf & "Du har ingen tilkobling." & vbcrlf & "Din IP-adresse er:" & IP_Address & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", IP_Address ElseIf kuttet = "10.216." Then InputBox vbcrlf & "Du er koblet til hovednettet." & vbcrlf & "Din IP-adresse er:" & IP_Address & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", IP_Address ElseIf kuttet = "10.217." Then InputBox vbcrlf & "Du er koblet til hovednettet via VPN." & vbcrlf & "Din IP-adresse er:" & IP_Address & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", IP_Address Else InputBox vbcrlf & "Nettverket du er koblet til gjenkjennes ikke." & vbcrlf & "Din IP-adresse er:" & IP_Address & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", IP_Address End If Function GetIP() Dim ws : Set ws = CreateObject("WScript.Shell") Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt" Dim ThisLine, IP If ws.Environment("SYSTEM")("OS") = "" Then ws.run "winipcfg /batch " & TmpFile, 0, True Else ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True End If With fso.GetFile(TmpFile).OpenAsTextStream Do While NOT .AtEndOfStream ThisLine = .ReadLine If InStr(ThisLine, "Address") <> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2) Loop .Close End With If IP <> "" Then If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, Len(IP) - 1) End If GetIP = IP fso.GetFile(TmpFile).Delete Set fso = Nothing Set ws = Nothing End Function Function kuttet() Dim ws : Set ws = CreateObject("WScript.Shell") Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt" Dim ThisLine, IP If ws.Environment("SYSTEM")("OS") = "" Then ws.run "winipcfg /batch " & TmpFile, 0, True Else ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True End If With fso.GetFile(TmpFile).OpenAsTextStream Do While NOT .AtEndOfStream ThisLine = .ReadLine If InStr(ThisLine, "Address") <> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2) Loop .Close End With If IP <> "" Then If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, 7) End If kuttet = IP fso.GetFile(TmpFile).Delete Set fso = Nothing Set ws = Nothing End Function Endret 13. januar 2009 av Kenny Bones Lenke til kommentar
Alexen Skrevet 14. januar 2009 Del Skrevet 14. januar 2009 Hei! Her er mitt forslag som ser ut til å fungere. Det bruker WMI for å gå igjennom nettverkskort i systemet. Har du f.eks to nettverkskort vil det dukke opp 2 inputbokser. ----- Kode On Error Resume Next IsIpSet = false strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration") For Each objItem In colItems For Each objValue In objItem.IPAddress If objValue <> "" and Instr(objValue, ":") = 0 Then isIpSet = true Select Case Left(objValue, 7) Case "192.168" InputBox vbcrlf & "Du er koblet til et privat nettverk." & vbcrlf & "Din IP-adresse er:" & objValue & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", objValue Case "169.254" InputBox vbcrlf & "Du har ingen tilkobling." & vbcrlf & "Din IP-adresse er:" & objValue & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", objValue Case "10.216." InputBox vbcrlf & "Du er koblet til hovednettet." & vbcrlf & "Din IP-adresse er:" & objValue & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", objValue Case "10.217." InputBox vbcrlf & "Du er koblet til hovednettet via VPN." & vbcrlf & "Din IP-adresse er:" & objValue & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", objValue Case Else InputBox vbcrlf & "Nettverket du er koblet til gjenkjennes ikke." & vbcrlf & "Din IP-adresse er:" & objValue & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", objValue End select End If Next Next if IsIpSet = false Then ' Ingen ip ble funnet Msgbox "Det ble ikke funnet noen ip" End if ----------------------------------- Et par notater. If objValue <> "" and Instr(objValue, ":") = 0 Then Her bruker jeg AND Instr(objValue,":") = 0 for å filtrere bort ipv6 som vista gir meg. Den kan du fjerne hvis du vil ha med det. Du kan bruke objItem.MACAddress for å få macaddressen til nettverkskortet som har ip'en. Lenke til kommentar
Alexen Skrevet 14. januar 2009 Del Skrevet 14. januar 2009 Det neste logiske steget vil vel være å forenkle koden noe. Ingen vits i å gjenta alle de inputbokskommandoene On Error Resume Next IsIpSet = false strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration") For Each objItem In colItems For Each objValue In objItem.IPAddress If objValue <> "" and Instr(objValue, ":") = 0 Then isIpSet = true Select Case Left(objValue, 7) Case "192.168": Message = "Du er koblet til et privat nettverk." Case "169.254": Message = "Du har ingen tilkobling." Case "10.216.": Message = "Du er koblet til hovednettet." Case "10.217.": Message = "Du er koblet til hovednettet via VPN." Case Else: Message = "Nettverket du er koblet til gjenkjennes ikke." End select InputBox vbcrlf & Message & vbcrlf & "Din IP-adresse er:" & objValue & _ vbcrlf & vbcrlf & vbcrlf & vbcrlf & _ "(Trykk Ctrl + C for å kopiere IP-adressen)", _ "Finn min IP-adresse", objValue End If Next Next if IsIpSet = false Then ' Ingen ip ble funnet Msgbox "Det ble ikke funnet noen ip" End if Lenke til kommentar
Kenny Bones Skrevet 15. januar 2009 Forfatter Del Skrevet 15. januar 2009 Takker! Dette ser bra ut! Men jeg testet det akkurat på en server som har to nettverkskort. Da dukker det opp to bokser og det er jo greit. Men er det noen måte å få navngitt nettverkskortene på også? F. eks "lokal tilkobling har IP-adresse %%" osv? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå