ExitCode eines .VBS nicht richtig wenn ich es aus einem Batch aufrufe ...
Also, ich möchte aus einer Batchdatei ein VB-Script aufrufen der nachschaut ob ein PCI-Device vorhanden ist und wenn dann mit einem Exitcode 0 beendet wird sonst 1.
Das Ergebnis möchte ich dann im einer Batchdatei via "If Errorlevel ..." verwerten.
Nun ist das eigenartige, das erst beim zweiten aufruf des Scripts der richtige Exitcode in der Errorlevel Variable steht !?
Vorgehen:
Ich nehme dazu erstmal eine Kommandozeile und rufe mein Script mit:
cscript meinscript.vbs VendorID DeviceID & Echo %Errorlevel%
auf, aber erst ab dem zweiten mal aufrufen kommt die "richtige" Antwort.
Ist wahrscheinlich nur irgendwo ne kleinigkeit aber ich seh die nicht ;-(
Hier mein bisheriger Code ...
Das Ergebnis möchte ich dann im einer Batchdatei via "If Errorlevel ..." verwerten.
Nun ist das eigenartige, das erst beim zweiten aufruf des Scripts der richtige Exitcode in der Errorlevel Variable steht !?
Vorgehen:
Ich nehme dazu erstmal eine Kommandozeile und rufe mein Script mit:
cscript meinscript.vbs VendorID DeviceID & Echo %Errorlevel%
auf, aber erst ab dem zweiten mal aufrufen kommt die "richtige" Antwort.
Ist wahrscheinlich nur irgendwo ne kleinigkeit aber ich seh die nicht ;-(
Hier mein bisheriger Code ...
Option Explicit
Dim exitcode
exitcode=1
' Check argument count
If WScript.Arguments.Count < 2 Then
MsgBox "Missing Arguments !" & VbCrLf & VbCrLf & Wscript.ScriptName & " VendorID DeviceID" & VbCrLf & VbCrLf & Wscript.ScriptName & " 8086 2592", 16, "Error"
exitcode=2
Wscript.Quit(exitcode)
End If
' Check argument lenght
If not Len(Wscript.Arguments(0))=4 Then
MsgBox " VendorID must be 4 digits !!! ", 16, "Error"
exitcode=2
Wscript.Quit(exitcode)
End If
If not Len(Wscript.Arguments(1))=4 Then
MsgBox " DeviceID must be 4 digits !!! ", 16, "Error"
exitcode=2
Wscript.Quit(exitcode)
End If
Dim buses,bus,device,devices,strVendor2Search,strDevice2Search
Set buses = GetObject("winmgmts:").InstancesOf("Win32_Bus")
strVendor2Search = "VEN_" & Wscript.Arguments(0)
strDevice2Search = "DEV_" & Wscript.Arguments(1)
For Each bus In buses
Set devices = GetObject("winmgmts:").ExecQuery ("Associators of {Win32_Bus.DeviceID=""" & bus.DeviceID & """} WHERE AssocClass = Win32_DeviceBus")
For Each device In devices
If InStr(UCase(device.PnPDeviceID),strVendor2Search) Then
If InStr(UCase(device.PnPDeviceID),strDevice2Search) Then
WScript.Echo " ", device.name
WScript.Echo vbTab, device.PnPDeviceID
WScript.Echo " "
exitcode=0
End IF
End IF
Next
Next
Wscript.Quit(exitcode)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121184
Url: https://administrator.de/contentid/121184
Ausgedruckt am: 05.11.2024 um 12:11 Uhr
2 Kommentare
Neuester Kommentar
Moin lobiwan,
schreibe in der Batchdatei statt...
... jetzt zweizeilig:
Wenn Du es in einer Zeile mit "&" verknüpft schreibst, wird der %Errorlevel% ausgegeben, der gesetzt war,
als die CMD.exe sich diese Zeile zum parsen, interpretieren und letzendlich ausführen geladen hat.
Also somit auch, bevor der CScript-Schlenker ausgeführt wurde.
Grüße
Biber
schreibe in der Batchdatei statt...
cscript meinscript.vbs VendorID DeviceID & Echo %Errorlevel%
cscript meinscript.vbs VendorID DeviceID
Echo %Errorlevel%
Wenn Du es in einer Zeile mit "&" verknüpft schreibst, wird der %Errorlevel% ausgegeben, der gesetzt war,
als die CMD.exe sich diese Zeile zum parsen, interpretieren und letzendlich ausführen geladen hat.
Also somit auch, bevor der CScript-Schlenker ausgeführt wurde.
Grüße
Biber