Попытка написать сценарий, который будет запускаться в WinPE, по сути, получает IP-адрес локального хоста и выбирает действие на основе диапазона IP-адресов.
В Windows скрипт работает без нареканий. Однако в WinPE я получаю следующую ошибку:
script.vbs(1,1) Ошибка выполнения Microsoft VBScript: нижний индекс вне допустимого диапазона
Google-fu говорит мне, что это как-то связано с тем, что мой массив находится за пределами диапазона. Здесь я думал, что у меня есть приличное понимание, но, видимо, нет.
Код, который работает как есть в Windows:
Option Explicit
Dim sIP, sHostname,sPingBat
Dim aIP
Dim iOct1, iOct2, iOct3, iOct4, iReturn
Dim oWMIService, oCmd, oAdapter
Dim cAdapters
iReturn = 999
sHostname = "."
Set oWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sHostname & "\root\cimv2")
Set cAdapters = oWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
Set oCmd = CreateObject("Wscript.Shell")
For Each oAdapter in cAdapters
If Not IsNull(oAdapter.IPAddress) Then
sIP = Trim(oAdapter.IPAddress(0))
Else
iReturn = 404
WScript.Quit iReturn
End If
Next
sIP = CStr(sIP)
aIP = Split(sIP, ".")
iOct1 = CInt(aIP(0))
iOct2 = CInt(aIP(1))
iOct3 = CInt(aIP(2))
iOct4 = CInt(aIP(3))
Теперь, если я изменю объявление массива aIP на одно из следующих:
aIP()
aIP(4)
и беги
aIP = Split(sIP, ".")
я получил
script.vbs(26, 1) Ошибка выполнения Microsoft VBScript: несоответствие типов
Изменение назначения массива / линии разделения на
aIP() = Split(sIP,".")
приводит к
script.vbs(26, 1) Ошибка выполнения Microsoft VBScript: нижний индекс вне допустимого диапазона
Значит, я явно что-то делаю не так.
Также вполне возможно, что мое исходное сообщение об ошибке совершенно не связано с моим диапазоном массивов, а WinPE просто не нравится мой сценарий (в этом случае, если у кого-то есть какие-либо указатели, это будет оценено)
На данный момент я монтирую свой wim, чтобы получить установочные пакеты, чтобы убедиться, что пакеты WMI и Scripting установлены из ADK.
.
, поэтомуSplit()
просто вернет массив, содержащий полную строку. Простая отладка состоит в том, чтобы записатьsIP
и проверить значение. Один из подходов состоит в том, чтобы сначала проверить значение.
, используяInStr()
. - person user692942   schedule 28.04.2016