VBScript无法从Array读取字符串

时间:2017-01-17 15:58:56

标签: vbscript

我目前正在编写一个相当简单的脚本来管理网络程序安装。作为此安装的一部分,我需要读取当前分配给任何实时适配器的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)

当然应该从阵列中拔出字符串?

2 个答案:

答案 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)检查数组。