2017-02-27 71 views
0

我试图使用.Exec来撤回机器的IP配置。从给定的命令输出我然后要返回所有无线和以太网LAN IPv4地址或“媒体断开连接”(如果不存在)。我很困扰如何解决这个问题,因为用户通常可以拥有多个NIC。我可以得到输出,但我不知道如何遍历ipconfig的结果来存储我需要的信息。使用VBScript将ipv4地址作为变量返回

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 

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

+1

使用'wmic'执行WMI查询返回的正是您所需要的信息可能比解析的输出更容易'ipconfig'.See http://serverfault.com/a/55437/1440 – Richard

回答

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 
0

我已经适应从另一个论坛的答案,使用WMI脚本中的VBScript包裹。这是目前存储的信息作为字符串但是这将是很容易,现在适应:

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 
相关问题