Попытка написать скрипт, который будет запущен в WinPE, который по существу получает IP-адрес локального хоста и выбирает действие на основе диапазона IP.Разбиение строки на ошибки в массиве
В Windows скрипт работает безупречно. Однако, в WinPE, я получаю следующее сообщение об ошибке:
script.vbs(1,1) Microsoft VBScript runtime error: Subscript out of range
Google-фу говорит мне, что есть что-то делать с моим массив находясь вне диапазона. Здесь я думал, что у меня хорошее понимание, но, видимо, нет.
код, который работает как на 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 runtime error: Type mismatch
Изменение массива назначения/линию разделения на
aIP() = Split(sIP,".")
результатов в
script.vbs(26, 1) Microsoft VBScript runtime error: Subscript out of range
Так что я, очевидно, делает что-то неправильно.
Это также вполне возможно, что мое первоначальное сообщение об ошибке не имеет никакого отношения к моей части массива, и WinPE просто не нравится мой сценарий (в этом случае, если кто-нибудь имеет какие-либо указатели, он бы оценил)
На данный момент я устанавливаю свой wim, чтобы установить пакеты установки, чтобы убедиться, что пакеты WMI и Scripting установлены из ADK.
Я не понимаю ваше первое сообщение об ошибке. Он говорит, что Array из индекса для * Line 1 Column 1 * не имеет смысла. –
Я предполагаю, что он возвращает IP6-адрес, который не похож на IP4-адрес, поэтому ожидаемое разделение не выполняется, потому что нет четырех ожидаемых октетов. Из документации - * Массив всех IP-адресов, связанных с текущим сетевым адаптером. Это свойство может содержать либо адреса IPv6, либо адреса IPv4 *. – Lankymart
IPAddress в индексе 0 будет IP6, который не содержит '.', поэтому' Split() 'просто вернет массив, содержащий полную строку. Простая отладка заключается в том, чтобы выписать 'sIP' и проверить значение. Один из подходов - проверить значение для '.' сначала, используя' InStr() '. – Lankymart