<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx</link><description>Posted by Greg Stemp . Ok, so yesterday I got a bit lackadaisical, and screwed up in my blog entry. Therefore, I vowed that today I wouldn&amp;#8217;t say anything dumb whatsoever. And, of course, the only way for me to do that is to just not say anything</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#79199</link><pubDate>Tue, 24 Feb 2004 16:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79199</guid><dc:creator>Andreas Häber</dc:creator><description>I used .wsf files last year :)&lt;br&gt;&lt;br&gt;I really liked the usage-tags, but it would be really nice if it took care of error-handling for usage as well. (Seems like this will come in MSH (see &lt;a target="_new" href="http://microsoft.sitestream.com/PDC2003/ARC/ARC334.htm"&gt;http://microsoft.sitestream.com/PDC2003/ARC/ARC334.htm&lt;/a&gt;), so I'm looking forward to that one! Lot's of other features to look forward to in MSH as well :))&lt;br&gt;&lt;br&gt;What I used the .wsf scripts for was to run tests of a system written in C++. So, with that background I really liked the include-feature as well :). Lot's of the tests had things in common, so for me it was natural to split those out in it's own file and include it.&lt;br&gt;&lt;br&gt;For me the WSH environment is nice to create tests, since it's easy to get information from the system+network using WMI and such. Creating the tests with c++ would've taken a lot more time and effort IMO.</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#79255</link><pubDate>Tue, 24 Feb 2004 17:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79255</guid><dc:creator>IM</dc:creator><description>I used wsf files to write scripts that generated software patches, lots of file copying, calling of regssvr32 stopping/starting services, MTS package stuff.&lt;br&gt;Then recently, I rewrote it in C# - I'm an intellisense kind of a guy! Much nicer environment to code in, even for 'scripty' tasks.&lt;br&gt;I used the 'job' facility, but found that ultimately it caused me more confusion than it helped. I had a bunch of BAT files that ran other batch files that ran jobs in the WSF file. What a mess!&lt;br&gt; Can't see myself using WSF again, but I think I am one of those people who is 'allergic' to run-time checked languages in general. I hated python too. :-)&lt;br&gt;&lt;br&gt;</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#79305</link><pubDate>Tue, 24 Feb 2004 19:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79305</guid><dc:creator>Peter Forret</dc:creator><description>I've been using WSF scripts for more than a year now, and I do not make .vbs scripts anymore. Why?&lt;br&gt;I don't use the 'multiple jobs' feature.&lt;br&gt;I don't use the 'multiple languages' feature (I'm a VBScript guy)&lt;br&gt;I don't use the 'type library' feature.&lt;br&gt;...&lt;br&gt;But one simple feature alone makes it worthwhile, one you didn't mention. It's the integrated option parsing (which is related to your 'usage' feature)&lt;br&gt;I can specify my options in any order, not use them if I don't want to and simply use WScript.Arguments.Named to access them. &lt;br&gt;I've added a small wrapper library I include in all my scripts that allows me to do&lt;br&gt;sSITE =GetNamedString(&amp;quot;site&amp;quot;,&amp;quot;none&amp;quot;)&lt;br&gt;  (get the /site:yyy option, or if it's not specified, give me default value 'none')&lt;br&gt;&lt;br&gt;E.g: one of my scripts is a timer/stopwatch.&lt;br&gt;Usage: waTimer.wsf CMD PARAM [/total:value] [/bar:value] [/calc:value] [/unit:value] [/scale:value] [there's more but you get the picture ...]&lt;br&gt;I can call it as &lt;br&gt;   waTimer STOP COPYJOB /total:1000   or&lt;br&gt;   waTimer /total:1000 /scale:60 STOP COPYJOB /unit:KB/min&lt;br&gt;Trivial, but really handy.&lt;br&gt;&lt;br&gt;Another thing I use in WSF is the &amp;lt;resource&amp;gt; tag:&lt;br&gt;&amp;lt;resource id=&amp;quot;History&amp;quot;&amp;gt;&lt;br&gt;* v1.1 - 2004-02-24 - Bugfix - enhanced performance&lt;br&gt;* v1.0 - 2004-01-13 - First public release&lt;br&gt;&amp;lt;/resource&amp;gt;&lt;br&gt;&lt;br&gt;I use it to have all my version/name/copyright/... information in easy editable tags in the first 20 lines of my script, and then use them as getResource(&amp;quot;History&amp;quot;) further on. This is a nice-to-have, I know.&lt;br&gt;&lt;br&gt;If you want to see the templates I made for .wsf scripts, check out &lt;a target="_new" href="http://winadmin.sourceforge.net"&gt;http://winadmin.sourceforge.net&lt;/a&gt; .&lt;br&gt;&lt;br&gt;Love the blog by the way,&lt;br&gt;&lt;br&gt;Peter</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#79429</link><pubDate>Tue, 24 Feb 2004 22:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79429</guid><dc:creator>Steven Griffiths</dc:creator><description>I've used the .wsf format in my scripts for about 6 months now and use it mainly for the usage instructions and to include a standard set of subroutines (mainly logging and error handling related) into my scripts. Sure, I could just cut and paste the routines and have a single file, but I have a deployment solution that comprises several scripts and each needs access to the logging and error handling routines. Including a single file simply means there's less code to manage.&lt;br&gt;&lt;br&gt;I take it you're not a .wsf file fan then?&lt;br&gt;&lt;br&gt;So when are Dean, Bob and Ethan going to contribute to this blog? Seems a bit unfair to leave all the work to one man! Which one of the is pro- .wsf?</description></item><item><title>Scripting: XML (.wsf) vs. </title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#79716</link><pubDate>Wed, 25 Feb 2004 12:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79716</guid><dc:creator>Paul's Imaginary Friend</dc:creator><description /></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#80456</link><pubDate>Thu, 26 Feb 2004 16:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:80456</guid><dc:creator>Eric Lippert</dc:creator><description>I've posted some comments following up on various issues raised in this entry.&lt;br&gt;&lt;br&gt;&lt;a target="_new" href="http://weblogs.asp.net/ericlippert/archive/2004/02/25/80139.aspx#80450"&gt;http://weblogs.asp.net/ericlippert/archive/2004/02/25/80139.aspx#80450&lt;/a&gt;&lt;br&gt;</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#82588</link><pubDate>Tue, 02 Mar 2004 13:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:82588</guid><dc:creator>Tarjei T. Jensen</dc:creator><description>Eric Lippert's comments are to the point.&lt;br&gt;&lt;br&gt;However I'd like to point out that .wsf messes up the structure of the script. You really don't want to have all that extranous stuff there.&lt;br&gt;&lt;br&gt;Includes and constants are nice, but it is more important that the script reads well. BTW A readable programming language is usally more verbose than the other ones.&lt;br&gt;&lt;br&gt;&lt;br&gt;greetings,&lt;br&gt;&lt;br&gt;</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#85036</link><pubDate>Sat, 06 Mar 2004 05:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:85036</guid><dc:creator>Bob Riemersma</dc:creator><description>Gonna hold my nose and hope markup brackets don't break something here...&lt;br&gt;&lt;br&gt;Speaking of &amp;lt;resource&amp;gt; tags:&lt;br&gt;&lt;br&gt;&amp;lt;job&amp;gt;&lt;br&gt;  &amp;lt;object id=&amp;quot;objFSO&amp;quot; progid=&amp;quot;Scripting.FileSystemObject&amp;quot;/&amp;gt;&lt;br&gt;  &amp;lt;reference object=&amp;quot;ADODB.Recordset&amp;quot;/&amp;gt;&lt;br&gt;  &amp;lt;object id=&amp;quot;objRS&amp;quot; progid=&amp;quot;ADODB.Recordset&amp;quot;/&amp;gt;&lt;br&gt;  &amp;lt;!-- Using Excel 9 (Office 2000).  Update the next two&lt;br&gt;       items appropriately for other versions of Excel.&lt;br&gt;       Next &amp;lt;reference&amp;gt; is EXCEL9.OLB TypeLib's GUID     --&amp;gt;&lt;br&gt;  &amp;lt;reference guid=&amp;quot;{00020813-0000-0000-C000-000000000046}&amp;quot;/&amp;gt;&lt;br&gt;  &amp;lt;object id=&amp;quot;objXL&amp;quot; progid=&amp;quot;Excel.Application.9&amp;quot;/&amp;gt;&lt;br&gt;  &amp;lt;resource id=&amp;quot;strConnection&amp;quot;&amp;gt;&lt;br&gt;    Provider=&amp;quot;Microsoft.Jet.OLEDB.4.0&amp;quot;;&lt;br&gt;      Extended Properties=&amp;quot;Text&amp;quot;;&lt;br&gt;      Data Source=&amp;quot;LogFiles&amp;quot;&lt;br&gt;  &amp;lt;/resource&amp;gt;&lt;br&gt;  &amp;lt;resource id=&amp;quot;sqlJoin&amp;quot;&amp;gt;&lt;br&gt;    SELECT&lt;br&gt;      [Employee ID],&lt;br&gt;      [Last Name],&lt;br&gt;      [First Name],&lt;br&gt;      [Middle Initial],&lt;br&gt;      AU,&lt;br&gt;      [Job Title],&lt;br&gt;      Left(DUMP.NTID, InStr(DUMP.NTID, &amp;quot;\&amp;quot;) - 1) AS [Domain],&lt;br&gt;      Mid(DUMP.NTID, InStr(DUMP.NTID, &amp;quot;\&amp;quot;) + 1)  AS [User's Name],&lt;br&gt;      Workstation&lt;br&gt;    FROM Dump.txt AS DUMP&lt;br&gt;      INNER JOIN DCLogs.csv AS DCLOGS ON DUMP.NTID = DCLOGS.NTID&lt;br&gt;        WHERE DUMP.[Employee ID] IS NOT NULL&lt;br&gt;    ORDER BY [Last name] ASC, [First Name] ASC, [Middle Initial] ASC;&lt;br&gt;  &amp;lt;/resource&amp;gt;&lt;br&gt;  &amp;lt;script language=&amp;quot;VBScript&amp;quot;&amp;gt;&lt;br&gt;    Option Explicit&lt;br&gt;&lt;br&gt;    Dim objFld, lngFlds&lt;br&gt;    Dim objWB, objWS, lngCol, strXLWB&lt;br&gt;&lt;br&gt;    strXLWB = WScript.ScriptFullName&lt;br&gt;    strXLWB = Left(strXLWB, InStrRev(strXLWB, &amp;quot;\&amp;quot;)) &amp;amp; &amp;quot;Report.xls&amp;quot;&lt;br&gt;    If objFSO.FileExists(strXLWB) Then&lt;br&gt;      objFSO.DeleteFile strXLWB&lt;br&gt;    End If&lt;br&gt;&lt;br&gt;    objRS.Open getResource(&amp;quot;sqlJoin&amp;quot;), _&lt;br&gt;               getResource(&amp;quot;strConnection&amp;quot;), _&lt;br&gt;               adOpenForwardOnly&lt;br&gt;    lngFlds = objRS.Fields.Count&lt;br&gt;&lt;br&gt;    Set objWB = objXL.Workbooks.Add&lt;br&gt;    Set objWS = objWB.WorkSheets(1)&lt;br&gt;    With objWS&lt;br&gt;      .Activate&lt;br&gt;      For lngCol = 1 To lngFlds&lt;br&gt;        .Cells(1, lngCol) = objRS.Fields(lngCol - 1).Name&lt;br&gt;      Next&lt;br&gt;      .Rows(&amp;quot;1:1&amp;quot;).Font.Bold = True&lt;br&gt;      .Rows(&amp;quot;1:1&amp;quot;).HorizontalAlignment = xlHAlignCenter&lt;br&gt;      .Rows(&amp;quot;2:2&amp;quot;).CopyFromRecordset objRS&lt;br&gt;      .Columns(&amp;quot;A:&amp;quot; &amp;amp; Chr(Asc(&amp;quot;@&amp;quot;) + lngFlds)).AutoFit&lt;br&gt;      .Rows(&amp;quot;2:2&amp;quot;).Select&lt;br&gt;      objXL.ActiveWindow.FreezePanes = True&lt;br&gt;      .Cells(1, 1).Activate&lt;br&gt;    End With&lt;br&gt;    Set objWS = Nothing&lt;br&gt;    objRS.Close&lt;br&gt;&lt;br&gt;    objWB.SaveAs strXLWB, xlWorkbookNormal&lt;br&gt;    Set objWB = Nothing&lt;br&gt;    objXL.Quit&lt;br&gt;    MsgBox &amp;quot;Report.xls Created&amp;quot;&lt;br&gt;  &amp;lt;/script&amp;gt;&lt;br&gt;&amp;lt;/job&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Small example, and I left out the Schema.ini file guiding the Jet Text Driver.  But you get the picture.  The SQL is less of a hassle without concatenating a long string up inline.</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#85037</link><pubDate>Sat, 06 Mar 2004 05:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:85037</guid><dc:creator>Bob Riemersma</dc:creator><description>Got me!&lt;br&gt;&lt;br&gt;Lost my leading whitespace. *sigh*  Live and learn.</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#85136</link><pubDate>Sat, 06 Mar 2004 12:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:85136</guid><dc:creator>Alex Angelopoulos</dc:creator><description>I generally have the same feelings that Eric Lippert does about this: WSFs are VERY useful, but for the role that scripts in the script center currently have, they're a bit too much for clear communication of an idea.&lt;br&gt;&lt;br&gt;That said, it is quite possible to completely automate validation of arguments for simple sets - in other words, if all of the arguments are a mix-and-match global group without any constraints (like &amp;quot;/A cannot be specified if /W is also specified, unless it is the third Wednesday in...&amp;quot;)&lt;br&gt;&lt;br&gt;At the bottom is the code for a WSC that does exactly this. Once registered on a system, you can call it from any XML-compliant WSF to automate validation of arguments; it will read the tags for your WSF and optionally the specific named job, then ensure that supplied commandline arguments match the named/unnamed specification.&lt;br&gt;&lt;br&gt;Example code use in a WSF:&lt;br&gt;&lt;br&gt;8&amp;lt; ---------------------------------&lt;br&gt;Set argEx = CreateObject(&amp;quot;WshArgument.Extensions&amp;quot;)&lt;br&gt;Set argEx.Wsh = WScript&lt;br&gt;argEx.RequireCScript = True&lt;br&gt;'argex.JobId = &amp;quot;main&amp;quot;&lt;br&gt;'argex.TraceExecution = True&lt;br&gt;'argex.AllowLooseTyping = True&lt;br&gt;'argex.ContinueOnFailure = True&lt;br&gt;'argex.ExitErrorLevel = True&lt;br&gt;argEx.ValidateArguments&lt;br&gt;'WScript.Echo &amp;quot;Was validation successful?&amp;quot;, argEx.IsValid&lt;br&gt;&lt;br&gt;8&amp;lt; ---------------------------------&lt;br&gt;and the WSC code:&lt;br&gt;8&amp;lt;----------------------------------&lt;br&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br&gt;&amp;lt;package&amp;gt;&amp;lt;component id=&amp;quot;main&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;?component error=&amp;quot;true&amp;quot; debug=&amp;quot;true&amp;quot;?&amp;gt;&lt;br&gt;&amp;lt;registration progid=&amp;quot;WshArgument.Extensions&amp;quot; classid=&amp;quot;{790E104C-7A48-499F-8EDA-6D5CD0A56D93}&amp;quot; description=&amp;quot;A WSF argument extension component, focusing on validation.&amp;quot; remotable=&amp;quot;no&amp;quot; version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;script language=&amp;quot;VBScript&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;![CDATA[&lt;br&gt;	Function Register()&lt;br&gt;		With CreateObject(&amp;quot;Scriptlet.TypeLib&amp;quot;)&lt;br&gt;			.MajorVersion = 1: .MinorVersion = 0&lt;br&gt;			.AddURL &amp;quot;wshargex.wsc&amp;quot;&lt;br&gt;			.Path = &amp;quot;wshargex.tlb&amp;quot;: .Name = .Path&lt;br&gt;			.Doc = &amp;quot;A WSF argument extension component, focusing on validation.&amp;quot;&lt;br&gt;			.GUID = &amp;quot;{C920CF60-675F-4D7E-87E7-D9076F58BB20}&amp;quot;&lt;br&gt;			.Write: .Reset&lt;br&gt;		End With&lt;br&gt;	End Function&lt;br&gt;&lt;br&gt;	Function Unregister(): End Function&lt;br&gt;	]]&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;&amp;lt;/registration&amp;gt;&lt;br&gt;&amp;lt;public&amp;gt;&lt;br&gt;	&amp;lt;property get name=&amp;quot;IsValid&amp;quot; description=&amp;quot;Whether or not the last invocation of ValidateArguments() returned a valid parse.&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property put name=&amp;quot;Wsh&amp;quot; description=&amp;quot;Object reference to the script host to pass in to the component.&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get put name=&amp;quot;TraceExecution&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property name=&amp;quot;JobId&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get put name=&amp;quot;RequireCScript&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get put name=&amp;quot;AllowLooseTyping&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get put name=&amp;quot;ContinueOnFailure&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get put name=&amp;quot;ExitErrorLevel&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get name=&amp;quot;wshArgTypeSimple&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get name=&amp;quot;wshArgTypeBoolean&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;property get name=&amp;quot;wshArgTypeString&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;method name=&amp;quot;Simple&amp;quot; description=&amp;quot;&amp;quot; internalname=&amp;quot;get_Simple&amp;quot;&amp;gt;&lt;br&gt;		&amp;lt;parameter name=&amp;quot;argName&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;/method&amp;gt;&lt;br&gt;	&amp;lt;method name=&amp;quot;String&amp;quot; description=&amp;quot;&amp;quot; internalname=&amp;quot;get_String&amp;quot;&amp;gt;&lt;br&gt;		&amp;lt;parameter name=&amp;quot;argName&amp;quot;/&amp;gt;&lt;br&gt;		&amp;lt;parameter name=&amp;quot;defaultValue&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;/method&amp;gt;&lt;br&gt;	&amp;lt;method name=&amp;quot;Boolean&amp;quot; description=&amp;quot;&amp;quot; internalname=&amp;quot;get_Boolean&amp;quot;&amp;gt;&lt;br&gt;		&amp;lt;parameter name=&amp;quot;argName&amp;quot;/&amp;gt;&lt;br&gt;	&amp;lt;/method&amp;gt;&lt;br&gt;	&amp;lt;method name=&amp;quot;ValidateArguments&amp;quot; description=&amp;quot;&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/public&amp;gt;&lt;br&gt;&amp;lt;object id=&amp;quot;fso&amp;quot; progid=&amp;quot;Scripting.FileSystemObject&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;object id=&amp;quot;xml&amp;quot; progid=&amp;quot;MSXML2.DOMDocument&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;script language=&amp;quot;VBScript&amp;quot;&amp;gt;&amp;lt;![CDATA[&lt;br&gt;Option Explicit&lt;br&gt;'&lt;br&gt;' Initialization of global/public variables&lt;br&gt;'&lt;br&gt;Const wshArgTypeSimple = 0&lt;br&gt;Const wshArgTypeBoolean = 11&lt;br&gt;Const wshArgTypeString = 8&lt;br&gt;Dim AllowLooseTyping, ContinueOnFailure, ExitErrorLevel&lt;br&gt;Dim IsValid, JobId, RequireCScript, TraceExecution, Wsh&lt;br&gt;&lt;br&gt;Initialize()&lt;br&gt;&lt;br&gt;Sub Initialize()&lt;br&gt;	xml.async = False&lt;br&gt;	AllowLooseTyping = False&lt;br&gt;	ContinueOnFailure = False&lt;br&gt;	ExitErrorLevel = 2&lt;br&gt;	IsValid = vbNull&lt;br&gt;	JobId = vbNullString&lt;br&gt;	RequireCScript = False&lt;br&gt;	Set Wsh = Nothing&lt;br&gt;	TraceExecution = 0&lt;br&gt;End Sub&lt;br&gt;&lt;br&gt;function put_Wsh(value)&lt;br&gt;	Set Wsh = value&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_TraceExecution()&lt;br&gt;	get_TraceExecution = TraceExecution&lt;br&gt;end function&lt;br&gt;function put_TraceExecution(value)&lt;br&gt;	TraceExecution = CBool(value)&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_RequireCScript()&lt;br&gt;	get_RequireCScript = RequireCScript&lt;br&gt;end function&lt;br&gt;function put_RequireCScript(value)&lt;br&gt;	RequireCScript = CBool(value)&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_AllowLooseTyping()&lt;br&gt;	get_AllowLooseTyping = AllowLooseTyping&lt;br&gt;end function&lt;br&gt;function put_AllowLooseTyping(value)&lt;br&gt;	AllowLooseTyping = CBool(value)&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_ContinueOnFailure()&lt;br&gt;	get_ContinueOnFailure = ContinueOnFailure&lt;br&gt;end function&lt;br&gt;function put_ContinueOnFailure(value)&lt;br&gt;	ContinueOnFailure = CBool(value)&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_ExitErrorLevel()&lt;br&gt;	get_ExitErrorLevel = ExitErrorLevel&lt;br&gt;end function&lt;br&gt;function put_ExitErrorLevel(value)&lt;br&gt;	ExitErrorLevel = CLng(value)&lt;br&gt;end Function&lt;br&gt;&lt;br&gt;function get_IsValid()&lt;br&gt;	get_IsValid = IsValid&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function ValidateArguments()&lt;br&gt;	Trace &amp;quot;Entering ValidateArguments()&amp;quot;&lt;br&gt;	' takes a ref to WScript as an argument.&lt;br&gt;	' Proceeds to do full parse and assembly of argument data.&lt;br&gt;	' To make checking IsValid unnecessary if we are NOT using&lt;br&gt;	' the default exit on failure, this function returns True if the&lt;br&gt;	' validation succeeded, false otherwise.&lt;br&gt;	ValidateArguments = False&lt;br&gt;	' We try to die on failures; this ensures that if errors and&lt;br&gt;	' interaction are suppressed that we don't try to validate anyway.&lt;br&gt;	' The fact that this is a function instead of a sub ensures that&lt;br&gt;	' the user can actually TEST the return value without even looking&lt;br&gt;	' at ValidationFailed as described above.&lt;br&gt;	Trace &amp;quot;Checking Whether host is valid.&amp;quot;&lt;br&gt;	If Not ValidScriptHost(Wsh) Then Exit Function&lt;br&gt;	Trace &amp;quot;Host is valid.&amp;quot;&lt;br&gt;	Trace &amp;quot;Loading script from &amp;quot; &amp;amp; Wsh.ScriptFullName&lt;br&gt;	If Not xml.Load(Wsh.ScriptFullName) Then Exit Function&lt;br&gt;	Trace &amp;quot;Loaded script successfully&amp;quot;&lt;br&gt;	Dim root&lt;br&gt;	if JobId = vbNullString Then&lt;br&gt;		Trace &amp;quot;No job specified, checking all named/unnamed elements.&amp;quot;&lt;br&gt;		set root = xml&lt;br&gt;	Else&lt;br&gt;		Trace &amp;quot;job specified: &amp;quot; &amp;amp; JobId&lt;br&gt;		set root = xml.selectSingleNode(&amp;quot;//job[@id='&amp;quot; &amp;amp; JobId &amp;amp; &amp;quot;']&amp;quot;)&lt;br&gt;	end if&lt;br&gt;	Dim node&lt;br&gt;	Trace &amp;quot;starting named node validation.&amp;quot;&lt;br&gt;	For Each node in root.selectNodes(&amp;quot;//named&amp;quot;)&lt;br&gt;		validateNamed node&lt;br&gt;	Next&lt;br&gt;	Trace &amp;quot;starting unnamed node validation.&amp;quot;&lt;br&gt;	validateUnNamed root.selectNodes(&amp;quot;//unnamed&amp;quot;)&lt;br&gt;	ValidateArguments = IsValid&lt;br&gt;	Trace &amp;quot;Exiting ValidateArguments() at end&amp;quot;&lt;br&gt;end function&lt;br&gt;&lt;br&gt;&lt;br&gt;	private sub validateNamed(node)&lt;br&gt;		' Look for required named arguments find or Die.&lt;br&gt;		' takes collection of &amp;quot;named&amp;quot; nodes as an argument&lt;br&gt;		dim name, value, nameType&lt;br&gt;		name = NodeAttribValue(node, &amp;quot;name&amp;quot;)&lt;br&gt;		Trace &amp;quot;checking named argument node with name &amp;quot; &amp;amp; name&lt;br&gt;		If Wsh.Arguments.Named.Exists(name) Then&lt;br&gt;			Trace &amp;quot;This argument was found on the commandline as well&amp;quot;&lt;br&gt;			If Not AllowLooseTyping Then&lt;br&gt;				Trace &amp;quot;We require strict argument types.&amp;quot;&lt;br&gt;				' We need to validate argument types.&lt;br&gt;				value = Wsh.Arguments.Named(name)&lt;br&gt;				Trace &amp;quot;The commandline argument's vartype and value: &amp;quot; _&lt;br&gt;					&amp;amp; VarType(value) &amp;amp; &amp;quot; &amp;quot; &amp;amp; value&lt;br&gt;				nameType = tovbVarType( NodeAttribValue(node, &amp;quot;type&amp;quot;) )&lt;br&gt;				Trace &amp;quot;The argument spec is for an argument of type: &amp;quot; _&lt;br&gt;					&amp;amp; nameType&lt;br&gt;				If Not VarType(value) = nameType Then Die()&lt;br&gt;			End If&lt;br&gt;		ElseIf CBool( NodeAttribValue(node, &amp;quot;required&amp;quot;) ) &amp;lt;&amp;gt; 0 then&lt;br&gt;			Trace &amp;quot;This is a required argument, but it wasn't supplied.&amp;quot;&lt;br&gt;			' if required=&amp;quot;true&amp;quot;, confirm user supplied it or Die.&lt;br&gt;			Die()&lt;br&gt;		' Argument &amp;quot;Typechecking&amp;quot;&lt;br&gt;		end if&lt;br&gt;	end sub&lt;br&gt;&lt;br&gt;&lt;br&gt;	private sub ValidateUnNamed(unnamedNodes)&lt;br&gt;		dim MaxIsMin, required, node&lt;br&gt;		required = 0: MaxIsMin = true&lt;br&gt;		' count required arguments, determine whether this is open number&lt;br&gt;		for each node in unnamedNodes&lt;br&gt;			' see if argument count is unbounded&lt;br&gt;			if toLong(NodeAttribValue(node, &amp;quot;many&amp;quot;)) = 1 then MaxIsMin = false&lt;br&gt;			' add the count of required arguments from the unnamed&lt;br&gt;			required = required + toLong(NodeAttribValue( node, &amp;quot;required&amp;quot;))&lt;br&gt;		next&lt;br&gt;		Trace &amp;quot;We require &amp;quot; &amp;amp; required &amp;amp; &amp;quot; unnamed arguments.&amp;quot;&lt;br&gt;		Trace &amp;quot;Is the maximum unnamed count the same as minimum? &amp;quot; _&lt;br&gt;			&amp;amp; CStr(MaxIsMin)&lt;br&gt;		'now we test to see if we have enough&lt;br&gt;		dim count: count = Wsh.Arguments.UnNamed.Count&lt;br&gt;		If count &amp;lt; required then&lt;br&gt;			Die()&lt;br&gt;		ElseIf count = required Then&lt;br&gt;			' we're fine - required = count&lt;br&gt;		ElseIf MaxisMin Then&lt;br&gt;			' We have more than the count and shouldn't. Die!&lt;br&gt;			Die()&lt;br&gt;		End If&lt;br&gt;	end sub&lt;br&gt;&lt;br&gt;&lt;br&gt;	private function NodeAttribValue(node, attributeName)&lt;br&gt;		dim Attribute&lt;br&gt;		set Attribute = node.attributes.getNamedItem(attributeName)&lt;br&gt;		if typename(Attribute) = &amp;quot;Nothing&amp;quot; then&lt;br&gt;			NodeAttribValue = Empty&lt;br&gt;		else&lt;br&gt;			NodeAttribValue = Attribute.nodeValue&lt;br&gt;		end if&lt;br&gt;	end function&lt;br&gt;&lt;br&gt;&lt;br&gt;	private function tovbVarType(typeString)&lt;br&gt;		' Casts a named argument type attribute value to a vb VarType value.&lt;br&gt;		' If the type value is not recognized, this returns null.&lt;br&gt;		select case lcase(typeString)&lt;br&gt;			case &amp;quot;boolean&amp;quot; tovbVarType = vbBoolean&lt;br&gt;			case &amp;quot;string&amp;quot; tovbVarType = vbString&lt;br&gt;			case &amp;quot;simple&amp;quot; tovbVarType = vbEmpty&lt;br&gt;			case else tovbVarType = vbNull&lt;br&gt;		end select&lt;br&gt;	end function&lt;br&gt;&lt;br&gt;&lt;br&gt;	private function toLong(value)&lt;br&gt;		' takes any normal numeric or boolean string and coerces to long;&lt;br&gt;		' treats true as +1&lt;br&gt;		if StrComp(value, &amp;quot;false&amp;quot;, vbTextCompare) = 0 then&lt;br&gt;			toLong = 0&lt;br&gt;		elseif StrComp(value, &amp;quot;true&amp;quot;, vbTextCompare) = 0 then&lt;br&gt;			toLong = 1&lt;br&gt;		else&lt;br&gt;			toLong = CLng( value )&lt;br&gt;		end if&lt;br&gt;	end function&lt;br&gt;&lt;br&gt;&lt;br&gt;	private function ValidScriptHost(host)&lt;br&gt;		' This routine first confirms that the hosting class actually IS&lt;br&gt;		' the WSH host - a necessity for using the WScript.Arguments&lt;br&gt;		' collection at this point, and for throwing a usable error in&lt;br&gt;		' another host.  Strictly speaking, this is an ugly hack though.&lt;br&gt;		' Someone could create a class with the name &amp;quot;IHost_Class&amp;quot;, and&lt;br&gt;		' a REALLY cool argument parser would take parsed arguments from&lt;br&gt;		' anywhere. All of the validation checks here other than testing&lt;br&gt;		' whether CScript is required as a host are designed to guard&lt;br&gt;		' against accidental misuse by a scripter, not an end-user.&lt;br&gt;		' I don't want to do the work that being cool would require, though.&lt;br&gt;		If RequireCScript And Not HostIsCscript() Then&lt;br&gt;				ValidScriptHost = False&lt;br&gt;				' We're going to abort processing anyway, but let's try to&lt;br&gt;				' Die() first. Trying to Die() will call the help, and then&lt;br&gt;				' the user can see the note that the scripter (hopefully) put&lt;br&gt;				' into the help text about needing cscript for some reason.&lt;br&gt;				Die()&lt;br&gt;		ElseIf Not (TypeName(host) = &amp;quot;IHost_Class&amp;quot;) Then&lt;br&gt;			' MsgBox. Ugly again...this is the only way to get the point&lt;br&gt;			' across if an erstwhile user has his error display suppressed&lt;br&gt;			' in Internet Explorer.&lt;br&gt;			MsgBox &amp;quot;This class MUST be used from WSH. Currently hosted by:&amp;quot; _&lt;br&gt;				&amp;amp; vbCrLf &amp;amp; TypeName(host)&lt;br&gt;			ValidScriptHost = False&lt;br&gt;		ElseIf host.Version &amp;lt; 5.6 Then&lt;br&gt;			' We aren't going to be able to work on a lesser version of WSH.&lt;br&gt;			' Just to be courteous, we will use WScript.Echo in case this is&lt;br&gt;			' a console session...&lt;br&gt;			Wsh.Echo &amp;quot;This code must be used within a WSF file hosted&amp;quot;, _&lt;br&gt;				&amp;quot;in WSH 5.6 or higher with VBScript 5 or higher installed.&amp;quot;&lt;br&gt;			Wsh.Echo &amp;quot;The correct version of WSH can be downloaded&amp;quot;, _&lt;br&gt;			&amp;quot;from &lt;a target="_new" href="http://msdn.microsoft.com/scripting.&amp;quot;"&gt;http://msdn.microsoft.com/scripting.&amp;quot;&lt;/a&gt;&lt;br&gt;			Die()&lt;br&gt;		Else&lt;br&gt;			' We don't require cscript and we are indeed in WSH, so&lt;br&gt;			' we're valid!&lt;br&gt;			ValidScriptHost = True&lt;br&gt;		End If&lt;br&gt;	end function&lt;br&gt;&lt;br&gt;&lt;br&gt;	private sub Die()&lt;br&gt;		Trace &amp;quot;Entering Die().&amp;quot;&lt;br&gt;		Trace &amp;quot;Value of ContinueOnFailure is: &amp;quot; &amp;amp; CStr(ContinueOnFailure)&lt;br&gt;		IsValid = False&lt;br&gt;		if Not ContinueOnFailure then&lt;br&gt;			Trace &amp;quot;We are exiting on failures; you should see help text.&amp;quot;&lt;br&gt;			Wsh.Arguments.ShowUsage()&lt;br&gt;			Wsh.Quit(ExitErrorLevel)&lt;br&gt;		End If&lt;br&gt;	end sub&lt;br&gt;&lt;br&gt;	private sub Trace(s)&lt;br&gt;		If TraceExecution Then fso.GetStandardStream(2).WriteLine s&lt;br&gt;	end sub&lt;br&gt;&lt;br&gt;	public function HostIsCscript()&lt;br&gt;		HostIsCscript = _&lt;br&gt;			LCase(Right(Wsh.FullName, 11)) = &amp;quot;cscript.exe&amp;quot;&lt;br&gt;		Trace &amp;quot;Is the host is cscript? &amp;quot; &amp;amp; HostIsCscript&lt;br&gt;	end function&lt;br&gt;&lt;br&gt;function get_Simple(ByVal argName)&lt;br&gt;	' Returns true/false for whether a simple argument ArgName was specified&lt;br&gt;	get_Simple = Wsh.Arguments.Named.Exists(argName)&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_Boolean(ByVal argName)&lt;br&gt;	' Get an optional boolean named argument if it exists;&lt;br&gt;	' if it does not exist, return the default value.&lt;br&gt;	If Wsh.Arguments.Named.Exists(argName) Then&lt;br&gt;		get_Boolean = CBool(argName)&lt;br&gt;	Else&lt;br&gt;		get_Boolean = CBool(defaultValue)&lt;br&gt;	End If&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_String(ByVal argName, ByVal defaultValue)&lt;br&gt;	' If a string named argument was specified on the script's&lt;br&gt;	' commandline, return it. If it wasn't, return a default value.&lt;br&gt;	If Wsh.Arguments.Named.Exists(argName) Then&lt;br&gt;		get_String = WScript.Arguments.Named(argName)&lt;br&gt;	Else&lt;br&gt;		get_String = defaultValue&lt;br&gt;	End If&lt;br&gt;end function&lt;br&gt;&lt;br&gt;function get_wshArgTypeSimple&lt;br&gt;	get_wshArgTypeSimple = wshArgTypeSimple&lt;br&gt;end function&lt;br&gt;function get_wshArgTypeBoolean&lt;br&gt;	get_wshArgTypeBoolean = wshArgTypeBoolean&lt;br&gt;end function&lt;br&gt;function get_wshArgTypeString&lt;br&gt;	get_wshArgTypeString = wshArgTypeString&lt;br&gt;end function&lt;br&gt;&lt;br&gt;]]&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;&amp;lt;resource id=&amp;quot;foo&amp;quot;&amp;gt;&amp;lt;![CDATA[This is a test.]]&amp;gt;&amp;lt;/resource&amp;gt;&lt;br&gt;&amp;lt;/component&amp;gt;&lt;br&gt;&amp;lt;/package&amp;gt;&lt;br&gt;</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#121910</link><pubDate>Wed, 28 Apr 2004 09:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:121910</guid><dc:creator>Jaspreet Deol</dc:creator><description>a way to avoid copying .vbs file into the .wsh file is to make .cls files instead.&lt;br&gt;&lt;br&gt;Just add the following to your .vbs file and change the extension to .cls&lt;br&gt;&lt;br&gt;&lt;br&gt;class classname&lt;br&gt;.vbs file code&lt;br&gt;end class&lt;br&gt;&lt;br&gt;and then in the .wsh file add at the top:&lt;br&gt;&lt;br&gt;&amp;lt;script language=&amp;quot;VBScript&amp;quot; src=&amp;quot;ClassObjects\ ... the path name...\clsname.cls&amp;quot; /&amp;gt;&lt;br&gt;&lt;br&gt;and there you are! No more copying huge chunks of code!&lt;br&gt;&lt;br&gt;</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#121936</link><pubDate>Wed, 28 Apr 2004 10:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:121936</guid><dc:creator>Jaspreet Deol</dc:creator><description>I get an error when trying to run this:&lt;br&gt;&lt;br&gt;&lt;br&gt;Option Explicit&lt;br&gt;' *****************************************************************************&lt;br&gt;' Class:    controller&lt;br&gt;' Created:	16 April 2004&lt;br&gt;' Version:	1.1&lt;br&gt;' Desc:		This class monitors all the jobs where each job calculates one M.I.S &lt;br&gt;'			statistic&lt;br&gt;'			&lt;br&gt;'			This allows for different jobs to be contained in a single file&lt;br&gt;'			instead of multiple script files.  Each job can be executed&lt;br&gt;'			separately and is dealt as a seperate entity.&lt;br&gt;' &lt;br&gt;' Creator:  JD08372&lt;br&gt;' *****************************************************************************&lt;br&gt;&lt;br&gt;&amp;lt;package&amp;gt;&lt;br&gt;	&amp;lt;Job id=&amp;quot;users&amp;quot;&amp;gt; // 'cscript //Job:users controller.wsf&lt;br&gt;		&amp;lt;script language=&amp;quot;VBScript&amp;quot; src=&amp;quot;classes\dbnames.cls&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br&gt;		&amp;lt;script language=&amp;quot;VBScript&amp;quot;&amp;gt;&lt;br&gt;			&lt;br&gt;			Option Explicit&lt;br&gt;			&lt;br&gt;			dim objdbnames&lt;br&gt;			set objdbnames = New dbnames&lt;br&gt;			dbnames.extract_serverdb_names&lt;br&gt;&lt;br&gt;&lt;br&gt;			' Clean up and exit once done&lt;br&gt;			Set objdbnames = Nothing&lt;br&gt;			Quit()&lt;br&gt;		&amp;lt;/script&amp;gt;&lt;br&gt;	&amp;lt;/Job&amp;gt;&lt;br&gt;&amp;lt;/package&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;the dbnames.cls runs alone when the class wrapper is taken away.&lt;br&gt;I want to use the .wsf file as i have lots of classes like dbnames.&lt;br&gt;&lt;br&gt;Please can someone help me asap??&lt;br&gt;&lt;br&gt;my email address: jkd01@doc.ic.ac.uk&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>WSF Files for sending to the "Administrator of the Day"</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#123543</link><pubDate>Fri, 30 Apr 2004 02:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:123543</guid><dc:creator>Michael Schell</dc:creator><description>Well I too resisted bothering with WSF files until very recently. The change came as my company got acquired by a big lumbering multinational, whose techs had little experience with scripting.&lt;br&gt;&lt;br&gt;I wrote a script to go out and force a &amp;quot;gpupdate /force&amp;quot; on all the computers in a particular OU to use in case of an emergency where we were blocking an executable using Software Restriction. I use WSH Remote Scripting, since some of the boxes seem to have configuraton pecularities that cause WMI's Win32_Process object to gag when run remotely. I like to spawn a separate Controller process for each targeted PC. That way the parent script doesn't have to wait around for a powered-down PC to time out before continuing to the next object. So I actually have three scripts: parent, a spawned controller script which in turn spawns a remote script.&lt;br&gt;&lt;br&gt;Do I dare send three scripts to these guys and hope that months after my term date (yup, they're closing us down and telling us to relocate or get out) they'll have kept all three in the same folder when time comes to actually use it? Uh, I decided to wrap them all into a single WSF file, and enjoy the quick and dirty objArgs.ShowUsage() support for free.&lt;br&gt;&lt;br&gt;Now that I have the boilerplate WSF set up, I'm finding myself using it for most of my administrative scripts that have to go out and connect to lots of PCs in turn, even if I don't anticipate that they'll get used by some poor Administrator Of The Day months after I'm gone :-)</description></item><item><title>re: How Come You Guys Don't Use .WSF Files?</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#202502</link><pubDate>Fri, 30 Jul 2004 20:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:202502</guid><dc:creator>Mark</dc:creator><description>How to use wsf file with C#?</description></item><item><title>Paradise Travel Vietnam</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#205967</link><pubDate>Mon, 02 Aug 2004 17:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:205967</guid><dc:creator>10000</dc:creator><description>10000</description></item><item><title>Vietnam Paradise Travels</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#205968</link><pubDate>Mon, 02 Aug 2004 17:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:205968</guid><dc:creator>10000</dc:creator><description>10000</description></item><item><title>Include files and ccripting? You bet - with WSF files!</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#424705</link><pubDate>Fri, 03 Jun 2005 09:27:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:424705</guid><dc:creator>Ken Schaefer</dc:creator><description>In ASP we've always been able to store common routines/classes in a separate file and use an #include...</description></item><item><title>Warum man f??r WSH-Scripte das wsf-Format verwenden sollte &amp;laquo; Susanns Weblog</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#5219197</link><pubDate>Mon, 01 Oct 2007 10:40:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5219197</guid><dc:creator>Warum man f??r WSH-Scripte das wsf-Format verwenden sollte « Susanns Weblog</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://susanneurich.wordpress.com/2007/10/01/warum-man-fur-wsh-scripte-das-wsf-format-verwenden-sollte/"&gt;http://susanneurich.wordpress.com/2007/10/01/warum-man-fur-wsh-scripte-das-wsf-format-verwenden-sollte/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Incude statement - is there such a thing? | keyongtech</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#9365641</link><pubDate>Thu, 22 Jan 2009 12:44:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9365641</guid><dc:creator>Incude statement - is there such a thing? | keyongtech</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://www.keyongtech.com/1941758-incude-statement-is-there-such"&gt;http://www.keyongtech.com/1941758-incude-statement-is-there-such&lt;/a&gt;&lt;/p&gt;
</description></item><item><title> The Scripting Guys First Blog How Come You Guys Don t Use WSF Files | Best Eye Cream</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#9707351</link><pubDate>Mon, 08 Jun 2009 06:01:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9707351</guid><dc:creator> The Scripting Guys First Blog How Come You Guys Don t Use WSF Files | Best Eye Cream</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://besteyecreamsite.info/story.php?id=1568"&gt;http://besteyecreamsite.info/story.php?id=1568&lt;/a&gt;&lt;/p&gt;
</description></item><item><title> The Scripting Guys First Blog How Come You Guys Don t Use WSF Files | work from home</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#9760794</link><pubDate>Tue, 16 Jun 2009 14:41:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9760794</guid><dc:creator> The Scripting Guys First Blog How Come You Guys Don t Use WSF Files | work from home</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://workfromhomecareer.info/story.php?id=22735"&gt;http://workfromhomecareer.info/story.php?id=22735&lt;/a&gt;&lt;/p&gt;
</description></item><item><title> The Scripting Guys First Blog How Come You Guys Don t Use WSF Files | debt consolidator</title><link>http://blogs.msdn.com/gstemp/archive/2004/02/24/79183.aspx#9788812</link><pubDate>Fri, 19 Jun 2009 18:06:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9788812</guid><dc:creator> The Scripting Guys First Blog How Come You Guys Don t Use WSF Files | debt consolidator</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://mydebtconsolidator.info/story.php?id=21743"&gt;http://mydebtconsolidator.info/story.php?id=21743&lt;/a&gt;&lt;/p&gt;
</description></item></channel></rss>