VBscript用于多个IP地址

时间:2013-08-06 02:06:19

标签: vbscript

我正在尝试在vbscript中编写一个脚本,但是作为一个近乎菜鸟并且在线教程不起作用,我不得不求助于在这里寻求帮助。

我从不同来源混合和匹配的脚本显示域,用户,计算机名称,IP地址。该脚本正在运行。但是在某些环境中,用户可能有多个IP地址,并且在MsgBox中显示时,只返回最后一个IP地址结果,在许多情况下,这是错误的。

我想知道如何添加/可以将地址存储在数组中,并且如果有多个结果,MsgBox会显示其他IP地址。

谢谢。


下面附带的脚本:

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

3 个答案:

答案 0 :(得分:1)

在您的代码MsgBox中将显示上次枚举的网络适配器的第一个地址。如果要显示所有IP地址,请更改此:

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

进入这个:

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, ", ")

答案 1 :(得分:0)

以下是在Windows 8中测试过的;完美无瑕!

    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>

答案 2 :(得分:0)

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