2017-01-17 57 views
-2

我正在編寫一個相當簡單的腳本來管理網絡程序安裝。作爲此安裝的一部分,我需要讀取當前分配給任何活動適配器的IP地址。VBScript無法從數組中讀取字符串

我可以讀取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

這個肯定是在回答之前,要去找dup。 – Lankymart

+0

如果這是一個重複的標記,我在發佈之前看了一下。的[的VBScript具有多個IP地址的使用] –

+0

可能的複製(http://stackoverflow.com/questions/18070715/vbscript-for-use-with-multiple-ip-addresses) – Lankymart

回答

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 
0

這是因爲arrAdapters(Z) = objIPConf.IpAddress可能會返回一個數組,而不是一個字符串。

更改您的代碼arrAdapters(Z) = objIPConf.IpAddress(0),它應該工作。或者你可以在做任何分配之前使用IsArray(objIPConf.IpAddress)檢查一個數組。