Forcing a Specific Scripting Engine

October 1st, 2008

I get a lot of questions asking for a simple way to force a script to run in either cscript.exe or wscript.exe–and there are several reasons why you might want to force the use of one engine over another. Cscript.exe is a good choice whenever you want to have a console output or mask passwords. It’s also the only scripting engine that allows you to work with standard input and output streams. Wscript.exe is a good choice whenever you want a script to run silently or without a window. In either case, you can write your code so that it forces the use of one or the other.

The code is pretty straightforward. Just make sure that your script begins with the code below and you’ll be off and running.

If LCase(Right(WScript.FullName, 11)) <> "cscript.exe" Then
    strPath = WScript.ScriptFullName
    strCommand = "%comspec% /k cscript " & Chr(34) & strPath & chr(34)
    CreateObject("WScript.Shell").Run(strCommand)
    WScript.Quit
End If

In this case, I’m forcing the use of Cscript.exe. I’m using the WScript.FullName property to return a string that contains the path to the currently running scripting engine. If this path does not contain the text “cscript.exe” then I force the script to launch itself with the proper scripting engine.

In the second line, the WScript.ScriptFullName property returns the path to the current script. In the next line, I build a DOS command that will launch the script with the proper engine. Notice that this line also contains a reference to cscript.exe. Finally, the script uses the WshShell object to execute the command I’ve built and then the original script exits.

For WScript.exe, you just need to change the two instances of cscript.exe to wscript.exe as shown below.

If LCase(Right(WScript.FullName, 11)) <> "wscript.exe" Then
    strPath = WScript.ScriptFullName
    strCommand = "%comspec% /k wscript " & Chr(34) & strPath & chr(34)
    CreateObject("WScript.Shell").Run(strCommand)
    WScript.Quit
End If

With this code in place, you can ensure that your script will always run in either Cscript.exe or Wscript.exe regardless of the current system default engine.

Please use the trackback link when linking to this post.

Related Posts:

Add to Technorati Favorites

Leave a Reply

.htaccess Apache article articles by Nilpo ASP ASP Free automation clipboard desktop Dev Shed docx drive Internet Explorer Microsoft PHP registry remove script scripting text tutorial tweak tweets Twitter UAC updates User Account Control VBS VBScript vista volume Windows Windows 7 Windows 2000 Windows Guru Windows Script Windows Script Host Windows Scripting Windows Vista Windows XP Word WScript wscript.exe WSH XP