Oooooo...
Oooooo...

Reputation: 1

VBscript for use with multiple IP addresses

I'm trying to write a script in vbscript but being a near noob and online tutorials didn't work, I had to resort to posting here asking for help.

The script that I've mixed and match from different sources displays domain, user, computer name, ip address. The script is working. However in certain environment, a user could potentially have multiple IP addresses and when displaying in MsgBox, only the last IP address result is returned and in many cases, that's wrong.

I would like to know how I add/can store the address in an array and have MsgBox display the other IP addresses if there was more than one result.

Thank you.


Script attached below:

Option Explicit
DIM WshNetwork, strComputer, IPConfigSet, objWMIService, IPConfig, i, j, strIP, title, message, colItems, objItem
DIM arrIPAddress, columnC, strIPAddress, testIP(3)

Set WshNetwork = WScript.CreateObject("WScript.Network")

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

Set IPConfigSet = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration",,48) 
For Each objItem in colItems 
    If isNull(objItem.IPAddress) Then
    Else
        Wscript.Echo "IPAddress: " & Join(objItem.IPAddress, ",")
        strIP = objItem.IPAddress(0)
    End If
Next

title = "Who Am I?"

message =   "Domain: " & vbTab & vbTab & WshNetwork.UserDomain & VbCrlf & _
            "User Name: " & vbTab & UCase(WshNetwork.UserName) & VbCrlf & _
            "Computer Name: " & vbTab & WshNetwork.ComputerName & VbCrlf & _
            "IP Address1: " & vbTab & strIP 

Msgbox message, , title

Upvotes: 0

Views: 6846

Answers (3)

Option Explicit
DIM WshNetwork, strComputer, IPConfigSet, objWMIService, IPConfig, i, j, strIP, title, message, colItems, objItem
DIM arrIPAddress, columnC, strIPAddress, testIP(3)

Set WshNetwork = WScript.CreateObject("WScript.Network")

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

Set IPConfigSet = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
   "SELECT * FROM Win32_NetworkAdapterConfiguration",,48) 
For Each objItem in colItems 
    If isNull(objItem.IPAddress) Then
    Else
   '    Wscript.Echo "IPAddress: " & Join(objItem.IPAddress, ",")
      strIP = objItem.IPAddress(0)
 End If
Next

title = "Who Am I?"

message =   "Domain: " & vbTab & vbTab & WshNetwork.UserDomain & VbCrlf & _
            "User Name: " & vbTab & UCase(WshNetwork.UserName) & VbCrlf & _
            "Computer Name: " & vbTab & WshNetwork.ComputerName & VbCrlf & _
            "IP Address1: " & vbTab & strIP 

Msgbox message, , title

Upvotes: 0

John Ace
John Ace

Reputation: 1

The following was tested in Windows 8; works flawlessly!

    Option Explicit
    DIM objHTTP, WshNetwork, strComputer, IPConfigSet, objWMIService, IPConfig, i, j, strIP, title, message, colItems, objItem
    DIM arrIPAddress, columnC, strIPAddress, testIP(3), addr

    Set objHTTP = WScript.CreateObject("MSXML2.ServerXmlHttp")
    objHTTP.Open "GET", "http://icanhazip.com", False
    objHTTP.Send

    Set WshNetwork = WScript.CreateObject("WScript.Network")

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

    Set IPConfigSet = objWMIService.ExecQuery _
        ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

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

    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
    ReDim arrIP(-1)
        For Each objItem In colItems
        For Each addr In objItem.IPAddress
    ReDim Preserve arrIP(UBound(arrIP)+1)
    arrIP(UBound(arrIP)) = addr
        Next
    Next

    title = "Who Am I?"

    message = "Domain:" & vbTab & vbTab & WshNetwork.UserDomain & vbNewLine & _
      "User Name:" & vbTab & UCase(WshNetwork.UserName) & vbNewLine & _
      "Computer Name:" & vbTab & WshNetwork.ComputerName & vbNewLine & _
      "Public IP Address: " & vbTab & objHTTP.ResponseText & vbNewLine & _
      "Network IPs v4 & v6: " & vbNewLine & vbTab & vbTab & Join(arrIP, ", " & vbNewLine & vbTab & vbTab) & "."
    Msgbox message, , title
    Set objHTTP = Nothing</code>

Upvotes: 0

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200453

In your code MsgBox will show the first address of the network adapter last enumerated. If you want to show all IP addresses, change this:

Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration",,48)
For Each objItem in colItems 
    If isNull(objItem.IPAddress) Then
    Else
        Wscript.Echo "IPAddress: " & Join(objItem.IPAddress, ",")
        strIP = objItem.IPAddress(0)
    End If
Next

title = "Who Am I?"

message =   "Domain: " & vbTab & vbTab & WshNetwork.UserDomain & VbCrlf & _
            "User Name: " & vbTab & UCase(WshNetwork.UserName) & VbCrlf & _
            "Computer Name: " & vbTab & WshNetwork.ComputerName & VbCrlf & _
            "IP Address1: " & vbTab & strIP

into this:

Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
ReDim arrIP(-1)
For Each objItem In colItems
    For Each addr In objItem.IPAddress
        ReDim Preserve arrIP(UBound(arrIP)+1)
        arrIP(UBound(arrIP)) = addr
    Next
Next

title = "Who Am I?"

message = "Domain:" & vbTab & vbTab & WshNetwork.UserDomain & vbNewLine & _
          "User Name:" & vbTab & UCase(WshNetwork.UserName) & vbNewLine & _
          "Computer Name:" & vbTab & WshNetwork.ComputerName & vbNewLine & _
          "IP Address1:" & vbTab & Join(arrIP, ", ")

Upvotes: 1

Related Questions