VBScript无法从数组中读取字符串

VBScript无法从数组中读取字符串,vbscript,Vbscript,我目前正在编写一个相当简单的脚本来管理网络程序的安装。作为此安装的一部分,我需要读取当前分配给任何活动适配器的IP地址 我可以毫无问题地读取IP地址,但是我现在很难读取从加载到的阵列中找到的地址。我在其他几个脚本中都是这样做的,所以我真的很困惑我做错了什么。我的脚本如下: 'Object declarations Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWMIService = GetObject("winmg

我目前正在编写一个相当简单的脚本来管理网络程序的安装。作为此安装的一部分,我需要读取当前分配给任何活动适配器的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
我不明白为什么我的“test”变量给出了在MsgBox中使用的类型不匹配?当我在VbsEdit中放置断点并检查我的测试变量时,它不会显示单个字符串值,而是显示一个位置为0且附加了一个值的数组。为什么在我指定时会出现这种情况

test = arrAdapters(Z)

当然它应该只是从数组中提取字符串?

这是因为
arrAdapters(Z)=objIPConf.IpAddress
可能返回的是数组而不是字符串


将代码更改为
arrAdapters(Z)=objIPConf.IpAddress(0)
,它应该可以工作。或者,在执行任何赋值之前,可以使用IsArray(objIPConf.IpAddress)检查数组。

IpAddress属性是VBScript中已存在的数组。您可以使用检查,例如,如下所示:

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

这肯定已经得到回答之前,去寻找dup。如果它是一个dup,请随意标记它,我有一个在发布前看。可能重复的可能相关