我正在尝试使用.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不是一种选择。
答案 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