使用VBScript将ipv4地址作为变量返回
问题描述:
我试图使用.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不是一种选择。
答
使用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
答
我已经适应从另一个论坛的答案,使用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
使用'wmic'执行WMI查询返回的正是您所需要的信息可能比解析的输出更容易'ipconfig'.See http://serverfault.com/a/55437/1440 – Richard