You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by jlwpc1 <jl...@mail.earthlink.net> on 2000/12/26 19:18:57 UTC

Windows Script Host

FYI

> Two, it's official ... we don't have anything useful on Win32 to help us with rewriting 
>  (no sed, no nothing, by default) so we will require perl. Sorry to anyone that causes 
> trouble for, but it's fairly unavoidable unless we want sed instead. 

Windows has built in script engines!

No need for
> awk -f < 0 ) { gsub( /@@ServerRoot@@/, serverroot ); print $$0 dstfl; 
either!

xxxxxxxxxx  Cut test make file xxxxxxxxxx

# File JSTEST.MAK
#
#
# The default installation directory is \Apache. This can be changed
# with the INSTDIR macro, for example:
#
#   nmake /f Makefile.win INSTDIR="d:\Program Files\Apache" installr
#
# Note: this does *NOT* change the compiled in default "server root"

!IF "$(INSTDIR)" == ""
INSTDIR=\Apache
!MESSAGE Using default install directory \Apache
!ENDIF

_apacher:
      @echo Now using as install directory $(INSTDIR)
      cscript apwinmk.js "$(INSTDIR)"
  
xxxxxxxxxx   END OF CUT MAKE FILE   xxxxxxxxxx

xxxxxxxxxx   CUT APWINMK.JS   xxxxxxxxxx

// Apache Windows Script Host test file called in make.

// Really this is just a JScript file running in WSH. Real WSH files use
// XML elements to call JScript or VBScript or PerlScript or CobolScript.

// Lets define some variables.
var s;     // This will hold most strings.


// Now we need the INSTDIR information from the make file that called us.

// Windows NT/2000 could just use these environment methods.
//var WshShell = WScript.CreateObject("WScript.Shell");
//WScript.Echo("WinDir is " + WshShell.ExpandEnvironmentStrings("%WinDir%"));
//WScript.Echo("INSTDIR is " + WshShell.ExpandEnvironmentStrings("%INSTDIR%"));

// But since Windows 95/98/98SE/ME have a hard time setting environment 
// variables via make files, then Apache Windows C Run Time Web Sever 
// developers will pass the INSTDIR variable on the command line to 
// this script file.

// Get the command line args.

var i, numargs = WScript.Arguments.length;
var objArgs = WScript.Arguments;
s = numargs;  

if (numargs < 2)
  s += " argument was passed to " + WScript.ScriptName + ". It was ";
else
  s += " arguments were passed to " + WScript.ScriptName + ". They were " ;

for (i = 0; i < numargs; i++)
  s += objArgs(i) + " ";

// To display the command line args, just
// remove the two slashes in the line below.
//WScript.Echo(s);

// We know the first argument (starting at zero) is the
// variable for INSTDIR, so store it away for latter use.
var instdir = objArgs(0);

// Now open the demo test file and display it.
// But first be safe and copy the file.

// We can create, delete, and move folders and files.

// There are LOTS of try...catch and if exists test.
// We will skip most of them for this demo.

// Make a dir on another drive (d:) for backup and copy the
// file (from e:) over to this backup dir. This backup dir
// could also be an environment variable or passed on the 
// command line as a argument to this file.

// Since while testing, we run and re-run this file 
// lets do some test!

// Contact the file system.
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (!fso.FolderExists("d:\\test\\apbackup"))
  fso.CreateFolder("d:\\test\\apbackup");
if (!fso.FileExists("d:\\test\\apbackup\\apcon.txt.bak"));
  fso.CopyFile("apcon.txt", "d:\\test\\apbackup\\apcon.txt.bak");

// Now do some Regular Expressions methods on the test demo file.

var f1, r, f;
var filename = "apcon.txt"
var ForReading = 1;
var ForWriting = 2;
var ForAppending = 8;

// Can open in Unicode or ASCII, but defaults to ASCII.
// We will read the whole file but could do line
// by line.

// Read all the file and display to screen.
f1 = fso.OpenTextFile("apcon.txt", ForReading);
WScript.Echo( f1.ReadAll() );
f1.close();

// Now demo the RegExp on apcon.txt file.

// Read from this file.
f1 = fso.OpenTextFile("apcon.txt", ForReading);

// Write to this file.
f2 = fso.CreateTextFile("ap.txt", ForWriting);
 
// RegExp stuff.
var re = /Win32/igm;
var rv = "";

while (!f1.AtEndOfStream)
{
  r =  f1.ReadLine();

  rv = r.replace(re,"Windows C Run Time");

  f2.WriteLine(rv);

}

f1.close();
f2.close();

// Let do some more RegExp stuff.

//Open the file we just wrote to for reading.
f1 = fso.OpenTextFile("ap.txt", ForReading);
var tt = f1.ReadAll();
f1.close(); 

// All done with ap.txt file - for now!

// Do the RegExp stuff.
re = /problems/igm;
rv = tt.replace(re,"troubles");

// Copy the changes to do more RegExp stuff!
tt = rv;

re = /@@ServerRoot@@/igm;
rv = tt.replace(re,instdir);

// Copy the changes to do more RegExp stuff!
tt = rv;

re = /test/gm;
rv = tt.replace(re,"builtin scripting test");

// Copy the changes to do more RegExp stuff!
tt = rv;

// Get the short path name for the server root.

f = fso.GetFolder(instdir);
s = "The short path for Server Root is: " + f.ShortPath + " (8.3) size";
   
re = /root/gm;
rv = tt.replace(re,"root!\n" + s);

// All done with RegExp on apcon.txt so display difference.
WScript.Echo( rv );

// Might as well save what we did after we read the whole file,
// so overwrite the file with the changes.

f1 = fso.CreateTextFile("ap.txt", true);
f1.WriteLine(rv);
f1.close();


// End of file apwinmak.js

xxxxxxxxxx   END OF CUT APWINMK.JS   xxxxxxxxxx

xxxxxxxxxx    OUTPUT   xxxxxxxxxx

E:\scripts\aptest>make -DINSTDIR="E:\Test Programs\Apache Group\Web Servers" -f
jstest.mak
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
Now using as install directory E:\Test Programs\Apache Group\Web Servers
        cscript apwinmk.js "E:\Test Programs\Apache Group\Web Servers"
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2000. All rights reserved.

This is a Apache Win32 Web Server test file.
@@ServerRoot@@ is the server root!
This file will demo reading and writing files
for Apache Win32 Web Server make "problems".
Server Root is @@ServerRoot@@.
End of Apache Win32 Web Server test file.

This is a Apache Windows C Run Time Web Server builtin scripting test file.
E:\Test Programs\Apache Group\Web Servers is the server root!
The short path for Server Root is: E:\TESTPR~1\APACHE~1\WEBSER~1 (8.3) size!
This file will demo reading and writing files
for Apache Windows C Run Time Web Server make "troubles".
Server Root is E:\Test Programs\Apache Group\Web Servers.
End of Apache Windows C Run Time Web Server builtin scripting test file.

E:\scripts\aptest>

xxxxxxxxxx    END OF OUTPUT   xxxxxxxxxx

QUOTING Microsoft PR Below:

Microsoft Windows Script Host is a language-independent scripting host for ActiveX scripting engines.  It brings simple, powerful, and flexible scripting to the Windows 32-bit platform, allowing you to run scripts from both the Windows desktop and the command prompt.

Windows Script Host is ideal for non-interactive scripting needs such as logon scripting, administrative scripting, and machine automation.

Windows Script Host provides ActiveX interfaces for direct manipulation of script execution, as well as helper functions for other actions. The Windows Script Host Reference documents elements, methods, objects, and properties with which you can accomplish tasks such as the following: 
Print messages to the screen 
Run basic functions such as CreateObject and GetObject 
Map network drives 
Connect to printers 
Retrieve and modify environment variables 
Modify registry keys 
Regular Expressions

My PR addon below:

Create, delete, read and write files and folders 
Get user groups, etc.
Remote access,
Shell access,
And much more..

Back to QUOTING Microsoft PR 

Windows Script Host is integrated into Windows 98, Windows 2000 Professional, and Windows 2000 Server. Version 2.0 includes the VBScript and JScript scripting engines. In the future, other software companies may provide ActiveX scripting engines for languages such as PerlScript, TCL, REXX, and Python

End QUOTING Microsoft PR 

WSH upgrades are available for Windows 95 and Windows NT via IE upgrades, service packs, and downloading each "script accessory" that is wanted or needed!

WSH 2.0 Tutorial
http://msdn.microsoft.com/scripting/windowshost/doc/wsTutorialTOC.htm
WSH Documentation
http://msdn.microsoft.com/scripting/windowshost/docs/reference/default.htm
http://msdn.microsoft.com/scripting/windowshost/wshdoc.exe

VBScript User's Guide
http://msdn.microsoft.com/scripting/vbscript/doc/vbstutor.htm
VBScript Documentation
http://msdn.microsoft.com/scripting/vbscript/techinfo/vbsdocs.htm
http://msdn.microsoft.com/scripting/vbscript/download/vbsdoc.exe

FileSystemObject User's Guide
http://msdn.microsoft.com/scripting/vbscript/doc/jsFSOTutor.htm
VBScript Run-Time Library Reference [FileSystemObject/Dictionary]
http://msdn.microsoft.com/scripting/vbscript/doc/VBSFSOTOC.htm

JScript User's Guide
http://msdn.microsoft.com/scripting/jscript/doc/jsconJScriptUsersGuide.htm
JScript Documentation
http://msdn.microsoft.com/scripting/jscript/techinfo/jsdocs.htm
http://msdn.microsoft.com/scripting/jscript/download/jsdoc.exe

WSC Tutorial
http://msdn.microsoft.com/scripting/scriptlets/doc/lettitle.htm
WSC Documentation
http://msdn.microsoft.com/scripting/scriptlets/serverdocs.htm
http://msdn.microsoft.com/scripting/scriptlets/wscdoc.exe

Current version is 5.5 but version 5.6 (beta) is out - this is what I used for this test on an old Windows 95 computer (I know how Apache always uses OLD stuff)! :)

Mmmm,  WSH and registry read/write, folder create and VBScript input boxes and message boxes - sounds a lot like the start of an Apache Windows WSH (xml/jscript/vbscript) Command line Installer or even a HTA IE Apache Installer or both!  :)

JLW












Re: Windows Script Host

Posted by "William A. Rowe, Jr." <wr...@lnd.com>.
From: "jlwpc1" <jl...@mail.earthlink.net>
>
> Windows has built in script engines!

Correction, Windows 2000 and 98 have build in script engines.
For everyone else, it's install IE5 or WSH, a rather big download.

You propose a good solution for some.  Since I'm adverse to adding
dozens of little scriptlets when nmake does the work, I'd use;

_apacher:
      @echo Now using as install directory $(INSTDIR)
      cscript << "$(INSTDIR)"
   Some script here
<<

providing a single unified source.  Again, the issue remains that
not every Win32 user has awk, or sed, or cscript, or any other
consistent scripting engine.  They must download something.  Why
something huge?  It's a good solution, but not for Apache.  The
same reasoning as the scripting extensions you suggested earlier,
they require not Windows, but Windows and a lot of cruft that
doesn't belong on every user's web server (some, yes, but not every
user wants that sort of cruft.)

>QUOTING Microsoft PR Below:
>
>Microsoft Windows Script Host is a language-independent scripting
>host for ActiveX scripting engines.  It brings simple, powerful,
>and flexible scripting to the Windows 32-bit platform, allowing you 
>to run scripts from both the Windows desktop and the command prompt.
>[...]
>Windows Script Host is integrated into Windows 98, Windows 2000 
>Professional, and Windows 2000 Server. Version 2.0 includes the 
>VBScript and JScript scripting engines. In the future, other 
>software companies may provide ActiveX scripting engines for 
>languages such as PerlScript, >TCL, REXX, and Python

And is downloadable for Win95/NT4.  The engine includes ActiveState 
Perl when it's installed :-)

Again, cool stuff, but you continue to suggest that users need tens of
MBs of MS downloads to build on Win95/NT4.0.  That's not acceptable.
Thank you though, for the suggestion... I debated WSH vs. Perl 
until I decided that 130kb for awk is the simplest way to go, with
licensing compatible with the Apache goals.  If it wasn't awk, I'd
be leaning twords WSH since many (not all) users would have it 
installed already, but the same argument can be made for Perl.

Bill