我目前正在编写一个相当简单的脚本来管理网络程序安装。作为此安装的一部分,我需要读取当前分配给任何实时适配器的IP地址。
我可以毫无问题地阅读IP地址,但我现在正在努力阅读从我加载的阵列中找到的地址。我在其他几个脚本中这样做没有问题,所以我真的很难过我做错了什么。我的脚本如下:
'Object declarations
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colIPConf = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'")
'Check local IP addresses
Z = 0
Dim arrAdapters()
For Each objIPConf In colIPConf
ReDim Preserve arrAdapters(Z)
arrAdapters(Z) = objIPConf.IpAddress
test = arrAdapters(Z)
msgbox test ' TYPE MISMATCH HERE
Z = Z+1
Next
我不明白为什么我的测试"变量是否在MsgBox中使用类型不匹配?当我在VbsEdit中放置一个断点并检查我的测试变量时 - 它没有显示单个字符串值,而是显示位置为0且附加了值的数组。为什么在我指定
时就是这种情况test = arrAdapters(Z)
当然应该从阵列中拔出字符串?
答案 0 :(得分:1)
IpAddress
属性是VBScript中已有的数组。您可以使用VarType
and/or TypeName
functions进行检查,例如如下:
Option Explicit
On Error GoTo 0
Dim sResult: sResult = Wscript.ScriptName
'Object declarations
Dim objFSO, objWMIService, colIPConf
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject( _
"winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colIPConf = objWMIService.ExecQuery( _
"Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'")
'Check local IP addresses
Dim ii, arrAdapters, objIPConf
For Each objIPConf In colIPConf
sResult = sResult & vbNewLine & objIPConf.Description
arrAdapters = objIPConf.IpAddress
sResult = sResult _
& vbTab & VarType( arrAdapters) & vbTab & TypeName( arrAdapters)
For ii = 0 To UBound(arrAdapters)
sResult = sResult & vbNewLine & arrAdapters( ii)
Next
Next
Wscript.Echo sResult
Wscript.Quit
答案 1 :(得分:0)
这是因为arrAdapters(Z) = objIPConf.IpAddress
可能返回一个数组而不是一个字符串。
将您的代码更改为arrAdapters(Z) = objIPConf.IpAddress(0)
,它应该有效。或者,您可以在执行任务之前使用IsArray(objIPConf.IpAddress)
检查数组。