Hva er en WSF-fil?
En WSF-fil er et skript som faller under kategorien kjørbare og ofte brukt i Microsoft Windows. Skriptet støtter blanding av flere språk, det betyr at en WSF-fil kan inkludere en blanding av JScript, VBScript og eventuelt noen XML-elementer eller andre skriptspråk som Python, Object REXX, Perl, Kixtart hvis installert av brukeren. WSF-filene kjører seg selv i fravær av WScript eller CScript. WSF-filene kan være fordelaktige i feilisolering og eksponering av konstanter.
WSF-filformat
WSF-filformatet kan blande JScript og VBScript fra dine tidligere Windows Script Host-prosjekter, en .wsf-fil lar deg bruke dem med Windows Script Host. Et WSF-skript innkapsler et bibliotek med funksjoner som kan brukes av ulike WSF-filer. Eksemplet nedenfor viser en .wsf-fil som inkluderer en JScript-fil (fso.js), pluss en VBScript-funksjon som kaller en annen funksjon.
<job id="IncludeExample">
<script language="JScript" src="FSO.JS"/>
<script language="VBScript">
' Get the free space for drive C.
s = GetFreeSpace("c:")
WScript.Echo s
<script>
</job>
WSF-formatet støtter følgende tilleggsfunksjoner:
- Ta med utsagn
- Flere motorer
- Type biblioteker
- Verktøy
- Flere jobber i én fil
Fordeler med WSF-filer
WSF-filene kan være nyttige på følgende områder:
Feilisolering
Den modulære naturen til WSF-filen kan forhindre at en skriptreferanse forstyrrer en annen, noe som gjør WSF nyttig for å isolere feil. Her er et eksempel på WSF med en modul som produserer en feil og en som ikke gjør det:
<?xml version="1.0" ?>
<job id="Partially works">
<!-- This will not work -->
<script language="VBScript">
' <![CDATA[
WScript.echo 4/0 ' Oh, boy! You cannot divide by zero...
]]>
</script>
<!-- This will work... definitely... -->
<script language="VBScript">
<![CDATA[
WScript.echo "Hello, Scripters!" & vbNewline & _
"Fantastic! It worked!"
' ]]>
</script>
</job>
Mixed language support
En WSF støtter flere språk, du kan ha ett skriptspråk som bruker kode fra et annet skriptspråk. Her er et eksempel på hvordan det fungerer:
<?xml version="1.0" ?>
<!-- Mixing JScript and VBScript -->
<job id="SORT-VBScriptWithJScript">
<script language="JScript">
function SortVBArray(arrVBArray) {return arrVBArray.toArray().sort();}
</script>
<script language="VBScript">
' <![CDATA[
'** Fastest sort: call the Jscript sort from VBScript
myData = "a,b,c,1,2,3,X,Y,Z,p,d,q"
wscript.echo "Original List of values: " & vbTab & myData
starttime = timer()
sortedArray = SortVBArray(split(myData,","))
endtime=timer()
jscriptTime = round(endtime-starttime,2)
wscript.echo "JScript sorted in " & jscriptTime & " seconds: " & vbTab & sortedArray
' ]]>
</script>
</job>
Exposing constants
WSF støtter bindingen av en XML-innpakning til en objektreferanse eller kontroll, slik at du kan bruke objektets konstanter i stedet for å måtte erklære dem. Følgende er et eksempel:
<?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.
The CDATA open and close must be masked
from VBScript by making them comments.
-->
<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>