Jump to content

Windows Script File

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Soumyasch (talk | contribs) at 05:08, 10 May 2008 (lead is a L1 section, first subsections are L2 not L3). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Windows Script File
Filename extension
.wsf
Internet media typetext/xml
Developed byMicrosoft
Type of formatScripting
Container forScripts

A Windows Script File (WSF) is a file type used by the Microsoft Windows Script Host. It allows mixing scripting languages such as Perl, Object REXX, Python (programming language), Kixtart, JScript, and VBScript within a single file. These types of scripts may also be used to link many other external scripts together using a "src" parameter on the "<script>" tag in a manner similar to HTML. Windows Script Files have the extension ".WSF". A WSF makes reference to each script module in a very basic XML hierarchy as illustrated below.

Error isolation

A WSF may be useful for isolating errors. Its modular nature prevents one script reference from interfering with another. Here is a WSF example with one module that produces an error and one that does not:

<job id="Partially works">
  '** This will not work
  <script language="VBScript">
        WScript.echo 4/0 ' Oh boy! You cannot divide by zero...
  </script>
  '** This will work... definitely...
  <script language="VBScript">
        WScript.echo "Hello Scripters!" & vbNewline & _
                     "Fantastic! It worked!"
  </script>
</job>

The first script module will produce a "divide by zero" error. Typically this would cause the script to end in the Windows Script Host but this modular method allows the script to continue and execute the second script module.

Exposing constants

Another very useful feature of a WSF is that the XML wrapper can be bound to an object reference or control so you can use that object's constants instead of having to declare them. In regular VBScript and JScript files, you would be forced to declare a constant's value (outside of those that are internal to the Windows Script Host) in order to use the constant. An example of this is shown below:

const adLockBatchOptimistic = 4
MsgBox "The value of ""adLockBatchOptimistic"" is " & _ 
       adLockBatchOptimistic & ".", vbInformation,"adLockBatchOptimistic"

If your object documentation only refers to the constant's name and not the constant's value, you would have no way of knowing the value without the help of an Integrated development environment to tell you what they equate to. By using the WSF reference declaration, you can use the constants without declaring their values. The example below enumerates the values of several common constants in the ADO (ActiveX Data Objects) Recordset.

<?xml version="1.0" ?>
<!-- WSF Example with Object Reference
Notes for this very formal example: 
CDATA is used to help the XML parser 
ignore special characters in the content 
of the script.
-->
<package>
 <job id="EnumerateConstantsADO">
  <reference object="ADODB.Recordset" />
   <script language="VBScript">
    <![CDATA[
     dim title, str, i
     ctecArray = Array("adOpenUnspecified","adOpenForwardOnly", _ 
                       "adOpenKeyset","adOpenDynamic","adOpenStatic")
     title = "ADO Recordset Values for Constants"
     str = title & vbNewLine & vbNewLine
     str = str & "*CursorTypeEnum Constants*" & vbNewLine
     For i = 0 to ubound(ctecArray)
       str = str & Eval(ctecArray(i)) & vbTab & ctecArray(i) & vbNewLine
     Next
     str = str & vbNewLine
     str = str & "*LockTypeEnum Constants*" & vbNewLine  
     ltecArray = Array("adLockUnspecified","adLockReadOnly", _
                       "adLockPessimistic","adLockOptimistic", _ 
                       "adLockBatchOptimistic")
     For i = 0 to ubound(ltecArray)
       str = str & Eval(ltecArray(i)) & vbTab & ltecArray(i) & vbNewLine
     Next
     MsgBox str, vbInformation, Title
    ]]>
   </script>
 </job>
</package>
File:EnumerateConstantsADO.jpg
ADO Recordset Constants and Values

Running the above script from a file with a ".WSF" extension, such as one named "EnumerateConstantsADO.wsf", will produce the result shown in the picture at the right of this paragraph. Using the object reference to expose the constants makes writing the script more like writing in a standard programming language. In fact, the contents of the sample script, written in VBScript, will actually compile into a Visual Basic program and run the same way as long as that program uses the same reference to ADODB.

See also