使用VBScript将ipv4地址作为变量返回

时间:2017-02-27 11:29:53

标签: vbscript wmi

我正在尝试使用.Exec来撤回计算机的IP配置。从命令的给定输出我想要返回所有无线和以太网LAN IPv4地址或"媒体断开"如果没有。由于用户通常可以使用多个NIC,因此我非常关注如何处理此问题。我可以得到输出但是我不知道如何迭代ipconfig的结果来存储我需要的信息。

Set objShell = CreateObject("WScript.Shell")
StrIPConfig = "ipconfig /all"
Set IPConfig = objShell.Exec(StrIPConfig)

strText = ""

Do While Not IPConfig.StdOut.AtEndOfStream
    strText = IPConfig.StdOut.Readline
    If InStr(strText, "Wireless Network Connection") Then
        strWLAN = IPConfig.StdOut.Readline +2
        WScript.Echo strWLAN
    End If
Loop

Do While Not IPConfig.StdOut.AtEndOfStream
    strText = IPConfig.StdOut.Readline
    If InStr(strText, "Local Area Connection") Then
        strLAN = IPConfig.StdOut.Readline +2
        WScript.Echo strWLAN
    End If
Loop

必须使用上面的Exec通过WMI Windows批处理文件或WMI VBscript或VBScript完成。不幸的是,PowerShell不是一种选择。

2 个答案:

答案 0 :(得分:0)

使用WMI(特别是Win32_NetworkAdapterConfiguration类)而不是炮轰:

Set wmi = GetObject("winmgmgts://./root/cimv2")

qry = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True"

For Each nic In wmi.ExecQuery(qry)
  For Each addr In nic.IPAddress
    WScript.Echo addr
  Next
Next

答案 1 :(得分:0)

我使用VBScript打包的WMI脚本调整了另一个论坛的答案。它目前将信息存储为字符串,但现在很容易适应:

strWLAN = ""
strLAN = ""
strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set IPAdapterSet = objWMIService.ExecQuery("Select AdapterType, NetConnectionID, MACAddress from Win32_NetworkAdapter WHERE NetConnectionID LIKE 'Wireless network%'")


For Each IPConfig in IPAdapterSet
 Set IPConfigSet = objWMIService.ExecQuery("Select IPEnabled, Description, Caption, IPAddress, MACAddress from Win32_NetworkAdapterConfiguration where IPEnabled='True' AND MACAddress = '" & IPConfig.MACAddress & "' ")
   For Each IPConf in IPConfigSet
    if NOT strWLAN="" then
      strWLAN = strWLAN & vbCrLf
    end if
    strWLAN = strWLAN  & " " & IPConfig.NetConnectionID & " "
    If Not IsNull(IPConf.IPAddress) Then
     For i = LBound(IPConf.IPAddress) to UBound(IPConf.IPAddress)
      If Not ((Instr(IPConf.IPAddress(i), ":") > 0) or (Instr(IPConf.IPAddress(i), "none") > 0)) Then
    if i=0 then
      strWLAN = strWLAN & " " & IPConf.IPAddress(i)
    else
      strWLAN = strWLAN & ", " & IPConf.IPAddress(i) 
    end if
      End If
     Next
    End If
   next
Next



Set objWMIService2 = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set IPAdapterSet2 = objWMIService2.ExecQuery("Select AdapterType, NetConnectionID, MACAddress from Win32_NetworkAdapter WHERE NetConnectionID LIKE 'Local Area Connection%'")


For Each IPConfig in IPAdapterSet2
 Set IPConfigSet = objWMIService.ExecQuery("Select IPEnabled, Description, Caption, IPAddress, MACAddress from Win32_NetworkAdapterConfiguration where IPEnabled='True' AND MACAddress = '" & IPConfig.MACAddress & "' ")
   For Each IPConf in IPConfigSet
    if NOT strLAN="" then
      strLAN = strLAN & vbCrLf
    end if
    strLAN = strLAN  & " " & IPConfig.NetConnectionID & " "
    If Not IsNull(IPConf.IPAddress) Then
     For i = LBound(IPConf.IPAddress) to UBound(IPConf.IPAddress)
      If Not ((Instr(IPConf.IPAddress(i), ":") > 0) or (Instr(IPConf.IPAddress(i), "none") > 0)) Then
    if i=0 then
      strLAN = strLAN & " " & IPConf.IPAddress(i)
    else
      strLAN = strLAN & ", " & IPConf.IPAddress(i) 
    end if
      End If
     Next
    End If
   next
Next


wscript.Echo strWLAN
wscript.Echo strLAN