Der Versuch, ein Skript zu schreiben, das in WinPE ausgeführt wird, erhält im Wesentlichen die IP-Adresse des lokalen Hosts und wählt eine Aktion basierend auf dem IP-Bereich aus.Zerlegung einer Zeichenfolge in Array-Fehler
In Windows läuft das Skript fehlerfrei. Doch in WinPE, erhalte ich folgende Fehlermeldung:
script.vbs(1,1) Microsoft VBScript runtime error: Subscript out of range
Google-fu sagt mir, dass etwas mit meinem Array außerhalb des Bereichs zu tun hat, zu sein. Hier dachte ich, ich hätte ein gutes Verständnis, aber anscheinend nicht.
Code, wie funktioniert, ist unter 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))
Nun, wenn ich die Erklärung des AIP-Array eine der folgenden ändern:
aIP()
aIP(4)
und laufen
aIP = Split(sIP, ".")
Ich bekomme
script.vbs(26, 1) Microsoft VBScript runtime error: Type mismatch
Ändern der Array-Zuordnung/Trennlinie zu
aIP() = Split(sIP,".")
Ergebnisse in
script.vbs(26, 1) Microsoft VBScript runtime error: Subscript out of range
So bin ich offensichtlich etwas falsch zu machen.
Es ist auch durchaus möglich, dass meine ursprüngliche Fehlermeldung zu meinem Array-Bereich völlig unabhängig ist, und WinPE wird meinen Skript gerade nicht wie
(in diesem Fall, wenn jemand irgendwelche Zeiger hat, würde es geschätzt werden)Im Moment mounte ich meine Wim, um die Installationspakete zu erhalten, um sicherzustellen, dass die WMI- und Scripting-Pakete vom ADK installiert werden.
Ich verstehe nicht, Ihre erste Fehlermeldung. Es sagt Array aus Index für * Zeile 1 Spalte 1 *, die keinen Sinn macht. –
Meine Vermutung ist, dass es die IP6-Adresse zurückgibt, die nichts wie eine IP4-Adresse aussieht, so dass die erwartete Aufteilung fehlschlägt, weil es nicht die vier erwarteten Oktetts gibt. Aus der Dokumentation - * Array aller IP-Adressen, die dem aktuellen Netzwerkadapter zugeordnet sind. Diese Eigenschaft kann entweder IPv6-Adressen oder IPv4-Adressen * enthalten. – Lankymart
Die IPAddress bei Index 0 ist eine IP6-Adresse, die kein '.' enthält. Daher gibt' Split() 'nur ein Array zurück, das die vollständige Zeichenfolge enthält. Einfaches debuggen ist es, 'sIP' auszugeben und den Wert zu überprüfen. Ein Ansatz wäre, den Wert für "." Zuerst mit "InStr()" zu überprüfen. – Lankymart