WSH FAQ

Alex Angelopoulos (aka at mvps dot org)

Recently moved to this location; please note that some onsite links may be not correctly relocated.  Also, during MSDN site updates over the last few months, some of the MSDN reference links have broken; I am working to update these as time allows. - aka 2002.09.12

Credits

This was literally lifted from the newsgroups postings almost verbatim in most places.  If you wonder why you don't see many attributions, it got difficult to keep track - especially since I would have had to attach Michael Harris' and Torgeir Bakken's names to virtually every entry here.

Most Useful Links

If you use WSH or even just VBScript/Jscript, the most important download to have is the WSH 5.6 documentation.

Voici la documentation en français.

Clarence Washington's Win32 Scripting site is the best general place to find all things related to scripting.

The Microsoft public newsgroups are the best place to ask questions and find answers:

microsoft.public.scripting.jscript

microsoft.public.scripting.vbscript

microsoft.public.scripting.wsh

Table Of Contents

Where's the Jscript FAQ?
What version of WSH do I have?
How do I control a specific window?
How do I enumerate the registry?
How do I sort items?
How can I send keystrokes to an active window?
What's the best text editor?
How can I modify the boot.ini delay time?
How can I send myself email from WSH without using Outlook?
Can I install WSH 5.6 on Win95?
How do I connect to a database from VBScript?
ActiveX
How can I make ActiveX work with Netscape?
How Do I Access WMI On Win9x?
SECTION 2: POSTING SUGGESTIONS
Before you post...
What is an MVP?
How should I post?
Microsoft Downloads
Non-Microsoft Downloads
Some Scripting Sites
Scripting Languages Known to be WSH/IE Hostable
Torgeir Bakken's ADSI (and other) Picks
Recent Michael Harris Links

SECTION 1: COMMON QUESTIONS AND ANSWERS

Where's the Jscript FAQ?

Why imitate? an excellent canonical reference is the comp.lang.javascript FAQ

Where can I find a list of all scriptable objects?

There is no such thing.  The reason is that this is a function of whether or not a developer exposes a product to automation.  Towards the end of my use of XP Pro RC2 (right before installing the release version) I had about 4500 ProgIDs and CLSIDs.

This was generated by having TLViewer export to IE.  Note that this was not a complete list for that system - there were lots of unregistered controls on it - and it won't do you much good since it tells you nothing about the object other than its CLSID and ProgID. It tells you the object's name and address, but nothing about what it does.

Why won't my .ws files work in newer versions of WSH?

Change the extension to .wsf and they will work fine.  IIRC, .ws files were in use for an IBM application and Microsoft decided to change the registered extension to prevent possible collisions.

What version of WSH do I have?

You can use the following 1-line VBScript to tell you:

MsgBox ScriptEngineBuildVersion

What Version of WSH comes with X?

From a post by Michael Harris (with amendments suggested by Muhammad Arabi):

Operating System WSH Version
 Windows 95  None
 Windows 98  1.0
 Windows Me  5.5
 Windows NT 4  None
 Windows 2000  5.1
 Windows XP  5.6

Here are the versions of WSH and the scripting engines (if different) which are installed with different versions of Internet Explorer. Note that the NT4 option pack includes WSH 1.0 as an option.

Internet Explorer WSH Version Script Engines
  4   ?   ?
  4.01   ?   ?
  5   ?   ?
  5.01   5.1   5.1
  5.5   5.1   5.5
  6   5.6   --

WSH 5.6 is not officially supported on Win95 (which itself is no longer supported), but reports are that 5.6 installs/runs OK on Win95 (as do 5.1 and 5.5).

How do I reuse scripts or share code and data between scripts?

In a WSF file:

<script language="VBScript" src="external.vbs"/>

For reference, http://msdn.microsoft.com/library/en-us/script56/html/wsAdvantagesOfWs.asp

In an HTML file:

<script language="VBScript" src="external.vbs"/></script>

You can also create and register reusable classes in a .WSC file:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/lettitle.asp

Another way - if you do not wish to use the above, you can load and execute a script as follows:

  Sub Include(sInstFile)
   Dim oFSO, f, s
   Set oFSO = CreateObject("Scripting.FileSystemObject")
   Set f = oFSO.OpenTextFile(sInstFile)
   s = f.ReadAll
   f.Close
   ExecuteGlobal s
  End Sub

I get an error when I run a script on Windows XP that looks like this: "The procedure entry point DoOpenPipeStream could not be located in the dynamic link library ScrRun.dll".

It's very likely that some other application you have installed put an older version of scrrun.dll on your system, causing this error. The version in %windir%\system32 should still be the correct one (it's a protected file, so it shouldn't have been overwritten), so you can probably just re-register it and all should be well. Type "regsvr32 scrrun.dll" from any command prompt. The version number on that file should be 5.6.0.6626. (Mike Whalen)

How do I control a specific window?

To simply set focus to a window with a particular title, you can use the AppActivate method. Here's an example from the WSH 5.6 documentation.

set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "calc"
WScript.Sleep 100
oShell.AppActivate "Calculator"

If you want a little more control - such as waiting on particular windows, etc - try using the Autoit ActiveX control.

How do I list all running programs/stop a program?

Your best bets here all involve WMI, which is a large topic in and of itself (I am leading up into a fancy excuse for not covering it here).  See the WMI downloads section if you don't have it installed.  Here is a bare bones script which does this.  Note that it does not deal with authentication issues, which become important when dealing with remote systems.

For Each obj In GetObject("winmgmts://" & computername & _
    "/root/cimv2").ExecQuery("SELECT * FROM Win32_Process")
   s = s & obj.Description & vbCrLf
Next

You may also directly shell out to a console command for this, such as tlist, tasklist, pslist, kill, taskkill, pskill.

How do I enumerate the registry?

See this MSDN reference:
 EnumKey Method in Class StdRegProv
 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/r_prov_43au.asp

How do I change screen resolution or wallpaper?

Screen resolution cannot be changed from WSH.  Here are some workarounds, almost entirely taken from Torgeir Bakken's responses on this topic.
 
  Use Multires (which is free)
  http://www.entechtaiwan.com/multires.htm
  
  Here's a reference to doing it via Java
  http://home.istar.ca/~neutron/JDirect/DisplaySettings/

It should also be possible to do this using the ChangeDisplaySettings API, but you would need to write a component to access it.
  
  Win9x clients running the QuickRes powertoy can run a shell command like this:
  RunDLL deskcp16.dll,QUICKRES_RUNDLLENTRY 1280x1024x24
  
 FINDING the screen resolution is possible, albeit not "natively" - here's a quick script that will give you current screen resolution via Internet Explorer:

with createobject("internetexplorer.application")
    .navigate "about:blank"
    with .document.parentWindow.screen
      msgbox .width & " by " & .height
    end with
  end with

Wallpaper can be modified in the registry; unfortunately, changes don't take place until you refresh, either by logoff/logon or by manually refreshing the desktop.
 The relevant registry key is HKCU\Control Panel\Desktop\Wallpaper.  To see an example script of copying wallpaper and changing it, see:
 
 http://groups.google.com/groups?selm=uFMs1Zq1AHA.2092%40tkmsftngp05

How do I read and write to ini-files?

 There are some canned procedures for doing this available from
 http://www.wshscripting.com
 and
 http://cwashington.netreach.net

How do I set environment variables?

A canned example script:

set shell = CreateObject("wscript.shell")
  set sysEnv = shell.Environment("SYSTEM")

'==> creates it...
  SysEnv("mySysVar") = "whatever"

'==> retrieves it...
  foo = SysEnv("mySysVar")
  msgbox foo

'==> removes it...
  SysEnv.Remove("mySysVar")

You can READ the environment using the standard WshEnvironment (see the documentation).  Note that the Win9x environment is SIGNIFICANTLY different from  NT/2K/XP.

How do I reboot or shut down a system from WSH?

The actual OS function to call varies depending on the operating system AND rev level - for example, even RUNDLL calls usable on Win95 and WIn98 are different from each other.
 
 Here are some possible "general" solutions. Note that for dealing with system control tasks your bets bet is almost always to use WMI.  WMI should be pre-installed if you have Windows 2000/XP or Windows Me. If you have NT4 or Win9x you can get it from the links at the end of the FAQ.
 
 If you have WMI installed:

Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
  
  for each OpSys in OpSysSet
   OpSys.Reboot()
  next

Also try looking at the Shutdown page:

http://www.robvanderwoude.com/shutdown.html

How do I set an environment variable accessible to other processes with WSH?

The simplest method if on NT/Win2K/XP is to create a "Volatile" environment variable.  Volatile variables last throughout the logon session.  Here's an example:

SetVar_Volatile "myvar","value_of_variable"

Sub SetVar_Volatile(VarName,VarValue)
 set shell = createobject("wscript.shell")
 set envVolatile = shell.environment("volatile")
 envVolatile(VarName) = VarValue
End Sub

On Win9x, only "Process" variables are available to WSH, so you need to look elsewhere for a tool to do this.  Your best option is the "winset" utility, which is available on all the Win9x CD media as an extra tool.  You would have to use wscript.shell's Run method and run Winset with the appropriate options in that case.

How do I find the name of the currently logged on user with WMI?

How do I sort items?

This is one of the mainstay topics of CS courses.  Even if you have not taken a CS class, this means that if you are any good at translating algorithms into code, you can  find dozens of examples in textbooks and in every numerical recipes book available, optimized for all sorts of situations.  If you aren't good at sight-reading algorithms, keep reading....

 You can sort array elements in Jscript using the sort method - see the docs.
 
 Here's an example taken from there.

function SortDemo(){
     var a, l;                       //Declare variables.
     a = new Array("X" ,"y" ,"d", "Z", "v","m","r");
     l = a.sort();                   //Sort the array.
     return(l);                      //Return sorted array.
  }

Note that this function does a lexicographical comparison as Michael Harris has noted - so numbers will be sorted as 1,11,12...19,2,20,21..  Here's a comparison function you can use for this case:

var a = new Array();
  for (var i = 0; i < 15; i++)
     a[i] = Math.floor(Math.random() * 100);
  alert(a);
  a.sort(function (x, y) { return x - y; });
  alert(a)

How do I find files based on name/extension?

Here's a VBScript subroutine that looks for files in a folder with a given extension, using the  GetExtensionName method:

sub modCopyNewIniFiles
   set objNewIniFolder = objFileSystem.GetFolder(strNewIniFolder)
   set objIniFileSet = objNewIniFolder.Files
   for each objFile in objIniFileSet
      if (lcase(objFileSystem.GetExtensionName(objFile.name)) = "ini") Then
         objFileSystem.CopyFile objFile.path,strMircFolder & Chr(92)
      end if
   Next
end sub 'modCopyNewIniFiles

How do I run an external program from WSH?

Here's a code snippet using VBScript; for full details, look in the documentation for the Run and Exec methods.

set objShell=CreateObject("Wscript.Shell")
    objShell.Run("notepad")

Note that you will usually have to specify the full path to the program; in Jscript you will need to escape "\" characters (so "C:\apps\myapp.exe" becomes "C:\\apps\myapp.exe"); and whatever scripting host you use, the outside " marks are stripped as they are passed to the shell, so you will need to embed " marks to correctly handle paths with spaces in them.

How can I send keystrokes to an active window?

Again, see the docs; look for "SendKeys".

Set objShell = WScript.CreateObject("WScript.Shell")

    objShell.AppActivate "Notepad"
    objShell.SendKeys "Hello.{ENTER}How are you?"

Where can I find file XXX to download?

See the links at the bottom.  Please remember they can get stale, though.

 

What's the best text editor?

Ask 5 people and you will get 6 answers.  Here is a by no means complete list.
  Notepad - came with your OS.  Enough said.

TextPad - nice, simple, but very functional and highly configurable.

MultiEdit

HTML-Kit - very new and very nice.  Still in beta, but a highly configurable editor

PrimalScript - pricey, but so is a Ferrari

MSE - part of Visual Studio

The VBA editor that ships with Office (access using Alt+F11 within Office applications)

vim

UltraEdit

Scintilla

 Check the WSH Community on MSN in the links section; Ian has a lengthy list of these.

Also see Mark Pryor's suggestions on his web page About Script Editors.

How can I modify the boot.ini delay time?

The simplest method is to use WMI.  Here's an example:

Set CompSysSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_ComputerSystem")

For each CompSys in CompSysSet
  CompSys.SystemStartupDelay = 20
  CompSys.Put_()
 Next
 WScript.Echo "Boot up delay time set"

How can I send myself email from WSH without using Outlook?

Here's an example from Branimir Petrovic, showing how to use blat to do this. Blat is the tool for command line email needs, and a simple way to send email using WSH.  It's actually a procedure for checking machine uptime, and coincidentally shows correct usage for blat.  This example is a pure batch file and can be wrapped within WSH or called externally as a batch file.

:: Do yourself a favor - do it the simple way!
::
:: Get blat.exe (command line mail utility) from:
::  http://www.interlog.com/%7Etcharron/blat.html
::
:: Copy both blat.exe and uptime.exe to your path
:: (WinNT directory), save this as Uptime.bat, change
:: values to fit your environment, and run it.
::
:: --- Make a list of IPs you want to check
set IP1 = "192.168.0.1"
set IP2 = "192.168.0.2"
set IP2 = "192.168.0.3"

:: --- Next block is self-explanatory
set MAILTO = "me@my.dom"
set REPLYTO = "alterego@my.dom"
set SUBJECT = "You've got mail..."
set BODY = "C:\Uptime.log"


:: --- Set IP or host name of your SMTP server
set SMTP = 123.2.3.4


:: --- Check Uptimes
Uptime %IP1% > C:\Uptime.log
Uptime %IP2% >> C:\Uptime.log
Uptime %IP3% >> C:\Uptime.log

:: --- Send yourself mail (list of uptimes for choosen hosts)
blat %BODY% -to %MAILTO% -subject %SUBJECT% -attach %BODY% -server %SMTP% -f %REPLYTO%

Why can't I run the script debugger with a standalone script?

This is an historic issue with WSH.  You have 2 solutions:
 
 (1) Upgrade to latest version of WSH
 (2) Manually create a DWORD value named "JITDebug" and set it to 1 under the following registry key:
 HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings

Note that in order to run the debugger you need to specify it on the command line.  If you want to execute the script in the debugger, add the "//X" option to the command line for cscript or wscript - like

wscript //x myscript.vbs

How do I suppress debugging globally within a WSF file?

This is done simply by adding the instruction

<? debug="false">

Why can't I read REG_MULTI_SZ Values from the registry?

You can, but they are returned as an array (after all, they are more multiple values). You will need to explicitly iterate over the array returned in order to read the values.

Can I install WSH 5.6 on Win95?

Reportedly, yes.  It is not supported, but that's becuase Win95 is not supported by Microsoft either (a matter which is really of concern to you only if you are a direct channel purchaser).

If you don't already have it, you may need to install the latest DCOM for Win95 first - it is available from

http://www.microsoft.com/com/dcom/dcom95/dcom1_3.asp (2002.02.02)

How do I connect to a database from VBScript?

See the Microsoft online documentation:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmscadocodeexamplesinvbscript.asp

How do I get Java installed on my system?

If you don't have it installed (and possibly selected "Never ask me again" when prompted to install it in the past), you can download it from the following location:

http://www.microsoft.com/java/vm/dl_vm40.htm

Why are my attachments given 8.3 name format when I write them to a file from MAPI.Session?

Here's a solution: Attachment Long File Name Truncates to 8.3 Format
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q260294

What version of X came with Win2K? What is the current version?

Product Checkfile Win2K Version Current(2002.02.21)
WSH wscript.exe 5.1.0.4615 5.6.0.6626
ADSI adsnt.dll 5.0.2195.2778
(aka ADSI 2.5)
5.1.2600.0
WMI wbemcore.dll 1.5.0.1085.36
 (aka WMI 1.5)
5.1.2600.0

You can find a semi-up-to-date list of various file versions for WSH by following the hyperlink.

ActiveX

How can I make ActiveX work with Netscape?

ActiveX controls have never worked natively in Netscape.  With the disappearance of NCompass Labs, the key aftermarket integration for this has disappeared from the scene.

However, there are a few products which claim to work for interoperability using various mechanisms.  We can't attest to how well (or even how) they work, but here are a couple which we have recently encountered.

 Asgard Plugin Wizard Version 2 from Asgard software.

Fobs Systems also makes a Netscape plugin which we could not find on their website, but which is available on Winsite, called simply FOBS ActiveX Plugin 1.2.  If the plugin has moved, we suggest searching Winsite directly.

As an interesting note - Mozilla IS an ActiveX object.  In other words, you can control it externally once you have it installed on your system, through use of the "Mozilla.Application" ProgID.  In a rather ironic twist, though, it cannot self-host. It must be displayed within a form of some kind, such as a VB or VBA form... or Internet Explorer.

To see an example of this in action, check out the Rube Goldberg Memorial Scripting page.

 Can I use the Office application object models from VBScript?

(This is an at-length conceptual answer from Michael Harris)

When you read the help on the various objects, properties, methods, etc. you have to keep in mind that it's for VBA, not VBScript. VBA is hosted "from the inside" by the specific application. As the host, it automatically provides things to the VBA code that aren't automatic when you automate an application's object model "from the outside" using VBScript hosted by WSH.

The key items to remember:

--- No objects are automatically exposed to VBScript. You generally use an explicit CreateObject to get an instance of an object to use as the "root", usually the ".Application" object.

--- In VBA that Application object and it's immediate interface members (properties/methods) are automatically exposed. In VBScript you refer to the Application object and it's properties/methods through the object variable reference returned by the CreateObject.

--- Named constants specific to the application aren't exposed. You can either look them up and code them locally in the VBScript code as Const variables, or you can use the .wsf file format and a element to automatically expose them.

--- VBA supports named argument syntax (e.g., ArgName:="argvalue") in method calls. In WSH hosted VBScript, you have to code all arguments as positional arguments since named argument syntax is not supported.

Once you understand the "VBA from the inside" vs. "VBScript from the outside" issues and the fundamental differences between VBA and VBScript as separate but similar languages, you should be able to mentally "port" VBA and even full VB examples to VBScript.

"Object Required" Error Opening CHM files (such as the WSH docs)

Upgrading to at least Internet Explorer 5.5 should provide you with the functionality you need to open the Compiled HTML Help.

CScript Error: Loading your settings failed. (Access is denied.)

"That error message generally means you either don't have read permissions for HKLM\Software\Microsoft\Windows Script Host\Settings or the equivalent key in HKCU. You need to be able to read both of those to run WSH."

-Mike Whalen
Windows Script Dev

How Do I Access WMI On Win9x?

taken from:

http://msdn.microsoft.com/library/en-us/wmisdk/us_cmdln_9fnc.asp

Automatically Invoking WMI on Windows 95/98

The Windows Management service starts automatically on computers running Microsoft® Windows NT®/Microsoft® Windows® 2000, but not on computers running Windows 95/98. To set up the Windows Management service to start automatically on a Windows 95/98 system, you must make the following changes to the operating system registry.

  1. In the registry, navigate to the value named EnableRemoteConnect?.
  2. Under the key HKLM\SOFTWARE\MICROSOFT\OLE, set EnableDCOM? to "Y" if it is not set to "Y" already. "Y" is the default setting.
  3. In the registry under the key HKLM\SOFTWARE\MICROSOFT\OLE, set EnableRemoteConnect? to "Y". The default setting for the EnableRemoteConnect? value is "N" for Windows 95/98 systems.
  4. Place the following entry in the registry to enable the WMI automatic start feature:

    HKLM\SOFTWARE\Microsoft\wbem\cimom - AutostartWin9X

  5. Set the AutostartWin9x value to either "1" or "2". The following table lists possible values for AutostartWin9x and their meanings.
    Value Meaning
    "0" Manual

    Use this setting when you do not need the service running continuously. When a local request comes in, WMI starts to service the request. If you later restart the computer, the computer will start in manual mode (WMI will not start automatically).

    Note that remote startup requests are only supported on Windows NT/Windows 2000. Remote startup requests are not supported by COM on Windows 95/98.

    "1" Automatic if the computer system needs to reload

    Use this setting if you would normally have active event consumers. If WMI has active event consumers and the system (any system that supports WMI) needs to be restarted, WMI starts automatically after the system starts.

    "2" Automatic

    Windows Management service always starts automatically.


     

  6. Add the file Winmgmt.exe to the computer's Startup directory. You can find this file in the \Windows\WBEM directory.

 

SECTION 2: POSTING SUGGESTIONS

Before you post...

When you make a post asking for assistance with a specific error, the following information is crucial to help you get an answer quickly.   I have forgotten to provide some of these when posting questions myself, and all too often what could have been a 3-minute answer turns into a 5-day email exchange that wastes time for everyone - especially the poster.

(1) Tell us what version OS, WSH, and Internet Explorer you are using.  If you aren't certain about the WSH version, you can simply check the version of wscript.exe as a good guess.

(2) An error can be most easily tracked down by mentioning the exact error and showing the line on which it occured (even if you post the code, line breaks can make it hard to tell which line is which.

(3) Try posting the code if it is of reasonable length - if you can automatically insert line numbers, that is even better.

(4) Read Section 2: Posting Suggestions

What is an MVP?

First, here is what MVPs are not: MVPs are not Microsoft employees; they are merely people who have historically been such a significant, dedicated help to posters in a forum that they have been singled out for special recognition by Microsoft.

The downside of this is that they are not required to answer your questions and may not necessarily know everything about a topic.  The upside is that they are quite often excellent communicators and subject matter experts, working from a love for what they do.
 
 Please do NOT forget that they are typically doing this in their spare time and out of some insane internal urge to look at problems belonging to other people.  Try to be appreciative of your fellow posters, and remember that more often than not they are also working hard at daytime jobs where they often have their own problems to resolve.

How should I post?

We're glad you asked that.  Before we tell you, you should know that just like any other form of communication, good newsgroup posting technique is something you learn - not something you know naturally.  So don't take it personally if someone takes exception to how you post. Just correct it if it is truly a communication issue.

NEVER MULTIPOST, RARELY CROSSPOST

NEVER multi-post (separate IDENTICAL posts to different NGs or the same NG at different times) and ONLY cross-post (addressing a single post to more than 1 group at a time) to relevant groups.  If you hit "send" more than once, you are multi-posting, and that should never happen.
  The reason to stick to crossposting when necessary is that the answers will all be threaded together, making results easily accessible by you and all respondents.
  In any case, if you look at responses you will quickly note that any given group of the NGs are usually ALL examined by certain people - so they will likely see a single post and if appropriate they often reply including other appropriate NGs so question circulation widens.

USE AN INFORMATIVE SUBJECT

"It doesn't work!" is not very informative, although it may be the only thing that comes to mind at 2 AM. "Wscript.CreateObject("my.ProgID") fails with WSH 5.6" IS informative.

WHAT TO POST

If you get an error in a script, post at least the error code, the relevant lines of code, and anything special about circumstances (scripting engine version, OS, etc.).  You may even want to include the entire code in the body.  Note that it is best to put the code BELOW your question - it makes it easy to see a summary.

ATTACHMENTS

There are reasons to include attachments - that's why they are allowed.  Keep the following points in mind though.
  +Filetypes such as scripts and HTAs are typically deleted as a matter of course by email gateways, even embedded in zip files.  Rename scripts and such files to something ending in .TXT with a note about the necessary extension.
  +Remember that many people have low speed connections and typically are forced to cache downloads by default news client settings. Large or frequent un-needed attachments can annoy some people. If an attachment is over about 4-8KiB in size, you probably want to make it into a ZIP or CAB file (a rule I broke in my last post)

FOLLOW-UP

If something works, let the responders know; if it has problems, note that also in your answer. When you finalize, say "thank you".  Also, if you have done any research work in the process leading you to obscure sites or a unique solution, it would be nice if you posted links

Top-posting and calendars

Never "top-post" (setting your date ahead of current real-world date to post). This is a fast way to get your query to the top of the list where it will get repeated "Don't top-post, numbskull!" responses until its cancellation by the news server.

On a related note, the top cause of accidental crossposts seems to be checking a date via the taskbar clock - be careful if you ever do this, it can also have other significant drawbacks.

Grammar and Language in Posts

no native forums, code can be debugged anyway, many of top posters are extranationals

HTML versus text

not an issue with OE usually.  Note size limits on posts.  Also causes issues with Google archiving

Test posts

Use the test forums

Internal Structure
Dealing with code in posts.

Consider adding line numbers. Warn people about wrap. also may break down VBScript code lines with a &_ continuation.

APPENDIX: REFERENCES & ONLINE RESOURCES

Microsoft FRPs (Frequently Referenced Pages)

HTML Applications

Microsoft Downloads

Microsoft Platform SDK Site

Microsoft XML Core Services 4.0 RTM

MS OLE COM object viewer (oleview.exe)

WSH 5.6 - all versions
http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/MSDN-FILES/027/001/733/msdncompositedoc.xml

WMI Tutorial
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/574/msdncompositedoc.xml

WMI For Win9x
http://download.microsoft.com/download/platformsdk/wmi9x/1.5/W9X/EN-US/wmi9x.exe

WMI SDK
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/566/msdncompositedoc.xml

MS-DHTML Reference (these are huge - total about 20 MB or so)
ftp://ftp.microsoft.com/developr/platformsdk/feb2001/common/help/inet.chm
ftp://ftp.microsoft.com/developr/platformsdk/feb2001/common/help/inet.chi

System Administration Scripting Guide
http://www.microsoft.com/downloads/release.asp?ReleaseID=38942&area=search&ordinal=2

Non-Microsoft Downloads

For ActivePerl and ActivePython
http://www.activestate.com
  
AutoItX (the AutoItX control enhances the abilities of WSH to work with windows and sendkeys)
http://www.hiddensoft.com/AutoIt/index2.html
  
ScriptX
http://www.meadroid.com/scriptx

Lotus Notes Automation
http://www.notes.net/46dom.nsf
http://doc.notes.net/uafiles.nsf/docs/com10/$File/comdoc.chm

Type Library Documentor
ActiveX Diagnostics
http://www.codestone.co.uk/home.html

TLViewer:
http://mysite.verizon.net/res1ur2j/tlviewer.htm

ActiveX Documentor
http://vbaccelerator.com/codelib/actvxdoc/article.htm

KeyInfo (Gives keycode for any standard key pressed)
http://dnsoft.hypermart.net/ki/

Some Scripting Sites

 (mostly stolen wholesale from Mike Harris' 2001.03.15 post to microsoft.public.scripting.vbscript)

  The comp.lang.javascript FAQ
  http://jibbering.com/faq/
 
  Win32 Scripting [Clarence Washington]
  http://cwashington.netreach.net (script search form at bottom of page)
  
  Windows-Script [Ian Morrish]
  http://communities.msn.com/windowsscript
  
  WSH Utilities and Scripts Home Page [Jim Warrington]
  http://home.att.net/~wshvbs/index.htm
  
  WSH Scripting [Mark Pryor]
  http://home.sprintmail.com/~mpryor/
  
  Bruce's Reference Center
  http://www.geocities.com/waltonob/
  
  Windows Script Host Samples [Mitch Gallant]
  (using java: moniker)
  http://home.istar.ca/~neutron/wsh/
  
  SWYNK.COM: Windows Script Library on SWYNK
  http://www.swynk.com/winscript/
  
  AshleyIT Remote Scripting
  http://www.ashleyit.com/rs/
  
  Technology (FAQs)
  http://www.able-consulting.com/tech.htm
  
  W3Schools
  http://www.w3schools.com/
  
  Dev Guru - A Developer's Resource
  http://www.devguru.com/

Scripting Languages Known to be WSH/IE Hostable

This is a by-no-means-complete list.

Language OEM or Source Cost Remarks
VBScript, Jscript Microsoft Comes with WSH Standard - if you have WSH, you have these.
Object REXX IBM Purchase from IBM
Haskellscript Open Source Open Source
Mondrian Open Source Open Source for .NET only AFAIK
Perl ActiveState Open Source
Python ActiveState Open Source
Pscript MKS Purchase from MKS
Ruby Open Source Open Source This is a "modified" Ruby for COM integration.
ActiveBatch Advanced Systems Concepts Purchase from Advanced Systems Concepts
Nullscript Open Source Open Source "The scripting language about nothing."...really, it is.

Torgeir Bakken's ADSI (and other) Picks

MSDN Active Directory, ADSI and Directory Services

http://msdn.microsoft.com/nhp/default.asp?contentid=28000413

Active Directory Service Interfaces Overview

http://www.microsoft.com/windows2000/techinfo/howitworks/activedirectory/adsilinks.asp

Apostate Café: Windows Scripting Host / ADSI Cookbook:

http://www.apostate.com/programming/wsh-adsi.html

ADSI FAQ with examples at Clarence Washington's Scripting site:

http://cwashington.netreach.net/main_site/default.asp?topic=library

The Windows 2000 DDK

http://www.microsoft.com/ddk/W2kDDK.asp

Recent Michael Harris Links

Persistent Object Interfaces
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netdir/adsi/active_directory_service_interfaces_adsi.asp

Some MSKB Articles Relevant to Scripting (from Michael Harris again)

Q165967 - PRB: Script Error Occurs When Referencing Non-variant Array
http://support.microsoft.com/support/kb/articles/Q165/9/67.ASP

Q250344 - SAMPLE: ARRAYCONVERT.EXE Variant Conversion Functions
http://support.microsoft.com/support/kb/articles/Q250/3/44.ASP
 

Q239470 - PRB: Cannot Call GetObject from Script in IE to Access Running Object
http://support.microsoft.com/support/kb/articles/Q239/4/70.ASP