基本的にローカルホストの IP アドレスを取得し、IP 範囲に基づいてアクションを選択する、WinPE で実行されるスクリプトを作成しようとしています。
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 がスクリプトを気に入らない可能性も十分にあります (その場合、誰かがポインターを持っている場合は、それを歓迎します)。
現在、WMI とスクリプト パッケージが ADK からインストールされていることを確認するために、wim をマウントしてインストール パッケージを取得しています。