Function CheckScriptHost()

Die Funktion CheckScriptHost() ermittelt, welcher Windows Scripting Host WSH eingestellt ist und bekommt als Übergabeparameter einen boolschen Wert (true oder false), der in der Funktion ausgewertet wird, um ggfls. einen Skript Abbruch einzuleiten.

Der Microsoft WSH besteht streng genommen aus zwei Hosts, die in wscript.exe und cscript.exe implementiert sind. Auf Windows Rechner ist wscript.exe voreingestellt und mit dem Aufruf C:\>cscript //H:cscript kann permanent auf cscript.exe umgestellt werden.

 'globale Variablen
CONST CONST_ERROR = 0
CONST CONST_CSCRIPT = 1
CONST CONST_WSCRIPT = 2

Function CheckScriptHost(ByVal bQuit)
    On ERROR Resume Next
    Dim strFullname, strCommand, i, j, strMsg
    
    strFullname = wscript.FullName
    i = InStr(1, strFullName, ".exe", 1)
    If i = 0 then
        CheckScriptHost = CONST_ERROR
    Else
        j = InStrRev(strFullName, "\", i, 1)
        If j = 0 then
            CheckScriptHost = CONST_ERROR
        Else
            strCommand = Mid(strFullName, j+1, i-j-1)
            Select Case LCase(strCommand)
                Case "cscript"
                    CheckScriptHost = CONST_CSCRIPT
                Case "wscript"
                    CheckScriptHost = CONST_WSCRIPT
                Case Else
                    CheckScriptHost = CONST_ERROR
            End Select
        End If
    End If
    If CheckScriptHost <> CONST_CSCRIPT Then
        strMsg = "Scripting Host CSCRIPT erforderlich." & vbCRLF _
            & "Aufruf: cscript.exe myScript.vbs" & vbCRLF & vbCRLF _
            & "Cscript kann permanent gesetzt werden mit ..." & vbCRLF _
            & "CSCRIPT /H:CSCRIPT"
        MsgBox strMsg, 4096, "Need to run CSCRIPT"
        PrintLog 0, strMsg
        If bQuit Then
            wscript.quit
        End If
    End if
End Function

 

 

 

Die Funktion bekommt mit dem Parameter bQuit ein Flag, das angibt, ob das Skript beendet werden soll, wenn nicht cscript eingestellt ist.
In CheckScriptHost() werden global definierte Konstanten verwendet, die als Returnwert zurückgegeben werden.

Eigentlich bräuchte CheckScriptHost() keinen Return liefern, sondern könnte als Sub definiert sein, wenn der Aufruf generell mit dem Parameter true erfolgt, oder wscript.quit wird einfach immer ausgeführt, wenn nicht cscript eingestellt ist.

Wenn der Default wscript.exe eingestellt ist, dann wird jede Bildschirmausgabe mit wscript.echo in einer Windows MessageBox angezeigt, was bei vielen Ausgaben ziemlich nervig werden kann. Darum sollte, wenn es keine zwingende Anforderung gibt, cscript.exe verwendet werden. Jedes Script kann aber weiterhin mit "wscript.exe Name_des_Scripts" mit dem wscript Host gestartet werden.