home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / ras.cab / regconfig.vbs < prev    next >
Text File  |  1999-11-04  |  27KB  |  769 lines

  1. '********************************************************************
  2. '*
  3. '* File:           RegConfig.vbs
  4. '* Created:        March 1999
  5. '* Version:        1.0
  6. '*
  7. '*  Main Function:  Outputs or modifies the registry configuration.
  8. '*
  9. '*  RegConfig.vbs      [/S <server>] [/U <username>] [/W <password>] 
  10. '*                     [/O <outputfile>] [/P <proposedsize>]
  11. '*
  12. '* Copyright (C) 1999 Microsoft Corporation
  13. '*
  14. '********************************************************************
  15.  
  16. OPTION EXPLICIT
  17.  
  18.     'Define constants
  19.     CONST CONST_ERROR                   = 0
  20.     CONST CONST_WSCRIPT                 = 1
  21.     CONST CONST_CSCRIPT                 = 2
  22.     CONST CONST_SHOW_USAGE              = 3
  23.     CONST CONST_PROCEED                 = 4
  24.     CONST CONST_LIST                    = 4
  25.     CONST CONST_PSIZE                   = 5
  26.     
  27.     'Declare variables
  28.     Dim intOpMode, i
  29.     Dim strServer, strUserName, strPassword, strOutputFile
  30.     Dim intSize
  31.     'Make sure the host is csript, if not then abort
  32.     VerifyHostIsCscript()
  33.  
  34.     'Parse the command line
  35.     intOpMode = intParseCmdLine(strServer     ,  _
  36.                                 strUserName   ,  _
  37.                                 strPassword   ,  _
  38.                                 strOutputFile ,  _
  39.                                 intSize          )
  40.  
  41.  
  42.     Select Case intOpMode
  43.  
  44.         Case CONST_SHOW_USAGE
  45.             Call ShowUsage()
  46.  
  47.         Case CONST_LIST                 
  48.             Call LstRegConfig(strServer     , _
  49.                               strOutputFile , _
  50.                               strUserName   , _
  51.                               strPassword     )
  52.  
  53.         Case CONST_PSIZE                 
  54.             Call ChngPropSize(strServer     , _
  55.                               strOutputFile , _
  56.                               strUserName   , _
  57.                               strPassword   , _
  58.                               intSize         )
  59.  
  60.         Case CONST_ERROR
  61.             'Do Nothing
  62.  
  63.         Case Else                    'Default -- should never happen
  64.             Call Wscript.Echo("Error occurred in passing parameters.")
  65.  
  66.     End Select
  67.  
  68. '********************************************************************
  69. '* End of Script
  70. '********************************************************************
  71.  
  72. '********************************************************************
  73. '*
  74. '* Sub LstRegConfig()
  75. '*
  76. '* Purpose: Outputs or modifies the registry configuration.
  77. '*
  78. '* Input:   strServer           a machine name
  79. '*          strOutputFile       an output file name
  80. '*          strUserName         the current user's name
  81. '*          strPassword         the current user's password
  82. '*
  83. '* Output:  Results are either printed on screen or saved in strOutputFile.
  84. '*
  85. '********************************************************************
  86. Private Sub LstRegConfig(strServer, strOutputFile, strUserName, strPassword)
  87.  
  88.     ON ERROR RESUME NEXT
  89.  
  90.     Dim objFileSystem, objOutputFile, objService
  91.     Dim objRegSet, objReg, objInst, objWshNet
  92.     Dim strQuery, strMessage
  93.  
  94.     'Open a text file for output if the file is requested
  95.     If Not IsEmpty(strOutputFile) Then
  96.         If (NOT blnOpenFile(strOutputFile, objOutputFile)) Then
  97.             Call Wscript.Echo ("Could not open an output file.")
  98.             Exit Sub
  99.         End If
  100.     End If
  101.  
  102.     'Establish a connection with the server.
  103.     If blnConnect("root\cimv2" , _
  104.                    strUserName , _
  105.                    strPassword , _
  106.                    strServer   , _
  107.                    objService  ) Then
  108.         Call Wscript.Echo("")
  109.         Call Wscript.Echo("Please check the server name, " _
  110.                         & "credentials and WBEM Core.")
  111.         Exit Sub
  112.     End If
  113.  
  114.     'Get the first registry instance
  115.     Set objRegSet = objService.InstancesOf("Win32_Registry")
  116.     If Err.Number Then
  117.         Wscript.Echo("Error 0x" & CStr(Hex(Err.Number)) & _
  118.                      " occurred obtaining the program groups.")
  119.         If Err.Description <> "" Then
  120.             Wscript.Echo("Error description: " & Err.Description & ".")
  121.         End If
  122.         Err.Clear
  123.         Exit Sub
  124.     End If
  125.  
  126.     i = 0
  127.     For Each objInst In objRegSet
  128.         i = i + 1
  129.         If i = 1 Then Set objReg = objInst
  130.     Next
  131.  
  132.     'Get the current server's name
  133.     If IsEmpty(strServer) Then
  134.         Set objWshNet = CreateObject("Wscript.Network")
  135.         strServer = objWshNet.ComputerName
  136.     End If
  137.  
  138.     Call WriteLine("Registry configuration on Machine " & _
  139.                     strServer, objOutputFile)
  140.     Call Writeline("Registry name = " & objReg.Name, objOutputFile)
  141.     Call WriteLine("", objOutputFile)
  142.  
  143.     'Generate the header
  144.     strMessage = Empty
  145.     strMessage = strMessage + strPackString("Current Size (MB)", 25, 1, 1)
  146.     strMessage = strMessage + strPackString("Maximum Size (MB)", 25, 1, 1)
  147.     strMessage = strMessage + strPackString("Proposed Size (MB)",25, 1, 1)
  148.     Call WriteLine(strMessage, objOutputFile)
  149.  
  150.     'Output the registry information
  151.     strMessage = Empty
  152.     strMessage = strMessage + strPackString(objReg.CurrentSize,  25, 1, 1)
  153.     strMessage = strMessage + strPackString(objReg.MaximumSize,  25, 1, 1)
  154.     strMessage = strMessage + strPackString(objReg.ProposedSize, 25, 1, 1)
  155.  
  156.     Call WriteLine(strMessage, objOutputFile)
  157.  
  158.     If IsObject(objOutputFile) Then
  159.         objOutputFile.Close
  160.         Call Wscript.Echo ("Results are saved in file " & strOutputFile & ".")
  161.     End If
  162.  
  163. End Sub
  164.  
  165. '********************************************************************
  166. '*
  167. '* Sub ChngPropSize()
  168. '* Purpose: Obtains the display configuration of a machine.
  169. '* Input:   strServer           a machine name
  170. '*          strOutputFile       an output file name
  171. '*          strUserName         the current user's name
  172. '*          strPassword         the current user's password
  173. '*          intSize             the proposed size of the registry
  174. '*
  175. '* Output:  Results are either printed on screen or saved in strOutputFile.
  176. '*
  177. '********************************************************************
  178. Private Sub ChngPropSize( strServer,      _
  179.                           strOutputFile,  _ 
  180.                           strUserName,    _
  181.                           strPassword,    _
  182.                           intSize)
  183.  
  184.     ON ERROR RESUME NEXT
  185.  
  186.     Dim objFileSystem, objOutputFile, objService
  187.     Dim objRegSet, objReg, objInst, objWshNet
  188.     Dim strQuery, strMessage
  189.  
  190.     'Open a text file for output if the file is requested
  191.     If Not IsEmpty(strOutputFile) Then
  192.         If (NOT blnOpenFile(strOutputFile, objOutputFile)) Then
  193.             Call Wscript.Echo ("Could not open an output file.")
  194.             Exit Sub
  195.         End If
  196.     End If
  197.  
  198.     'Establish a connection with the server.
  199.     If blnConnect("root\cimv2" , _
  200.                    strUserName , _
  201.                    strPassword , _
  202.                    strServer   , _
  203.                    objService  ) Then
  204.         Call Wscript.Echo("")
  205.         Call Wscript.Echo("Please check the server name, " _
  206.                         & "credentials and WBEM Core.")
  207.         Exit Sub
  208.     End If
  209.  
  210.     'Get the first registry instance
  211.     Set objRegSet = objService.InstancesOf("Win32_Registry")
  212.     If blnErrorOccurred (" getting registry instance failed.") Then
  213.         Exit Sub
  214.     End If
  215.  
  216.     i = 0
  217.     For Each objInst In objRegSet
  218.         i = i + 1
  219.         If i = 1 Then Set objReg = objInst
  220.     Next
  221.  
  222.     'Get the current server's name
  223.     If IsEmpty(strServer) Then
  224.         Set objWshNet = CreateObject("Wscript.Network")
  225.         strServer = objWshNet.ComputerName
  226.     End If
  227.  
  228.     Call WriteLine("Modifying registry's proposed size on " & _
  229.                     strServer, objOutputFile)
  230.     objReg.ProposedSize = intSize
  231.     Call objReg.Put_()
  232.     If blnErrorOccurred (" modifying registry proposed size failed.") Then
  233.         Exit Sub
  234.     End If
  235.  
  236.     Call WriteLine("Registry configuration on Machine " & _
  237.                     strServer, objOutputFile)
  238.     Call Writeline("Registry name = " & objReg.Name, objOutputFile)
  239.     Call WriteLine("", objOutputFile)
  240.  
  241.     'Generate the header
  242.     strMessage = Empty
  243.     strMessage = strMessage + strPackString("Current Size (MB)", 25, 1, 1)
  244.     strMessage = strMessage + strPackString("Maximum Size (MB)", 25, 1, 1)
  245.     strMessage = strMessage + strPackString("Proposed Size (MB)", 25, 1, 1)
  246.     Call WriteLine(strMessage, objOutputFile)
  247.  
  248.     'Output the registry information
  249.     strMessage = Empty
  250.     strMessage = strMessage + strPackString(objReg.CurrentSize,  25, 1, 1)
  251.     strMessage = strMessage + strPackString(objReg.MaximumSize,  25, 1, 1)
  252.     strMessage = strMessage + strPackString(objReg.ProposedSize, 25, 1, 1)
  253.  
  254.     Call WriteLine(strMessage, objOutputFile)
  255.  
  256.     If IsObject(objOutputFile) Then
  257.         objOutputFile.Close
  258.         Call Wscript.Echo ("Results are saved in file " & strOutputFile & ".")
  259.     End If
  260.  
  261. End Sub
  262.  
  263. '********************************************************************
  264. '*
  265. '* Function intParseCmdLine()
  266. '*
  267. '* Purpose: Parses the command line.
  268. '* Input:   
  269. '*
  270. '* Output:  strServer         a remote server ("" = local server")
  271. '*          strUserName       the current user's name
  272. '*          strPassword       the current user's password
  273. '*          strOutputFile     an output file name
  274. '*
  275. '********************************************************************
  276. Private Function intParseCmdLine( ByRef strServer,        _
  277.                                   ByRef strUserName,      _
  278.                                   ByRef strPassword,      _
  279.                                   ByRef strOutputFile,    _
  280.                                   ByRef intSize           )
  281.  
  282.  
  283.     ON ERROR RESUME NEXT
  284.  
  285.     Dim strFlag
  286.     Dim intState, intArgIter
  287.     Dim objFileSystem
  288.  
  289.     If Wscript.Arguments.Count > 0 Then
  290.         strFlag = Wscript.arguments.Item(0)
  291.     End If
  292.  
  293.     If IsEmpty(strFlag) Then                'No arguments have been received
  294.         intParseCmdLine = CONST_LIST
  295.         Exit Function
  296.     End If
  297.  
  298.     'Check if the user is asking for help or is just confused
  299.     If (strFlag="help") OR (strFlag="/h") OR (strFlag="\h") OR (strFlag="-h") _
  300.         OR (strFlag = "\?") OR (strFlag = "/?") OR (strFlag = "?") _ 
  301.         OR (strFlag="h") Then
  302.         intParseCmdLine = CONST_SHOW_USAGE
  303.         Exit Function
  304.     End If
  305.  
  306.     'Retrieve the command line and set appropriate variables
  307.      intArgIter = 0
  308.     Do While intArgIter <= Wscript.arguments.Count - 1
  309.         Select Case Left(LCase(Wscript.arguments.Item(intArgIter)),2)
  310.   
  311.             Case "/s"
  312.                 If Not blnGetArg("Server", strServer, intArgIter) Then
  313.                     intParseCmdLine = CONST_ERROR
  314.                     Exit Function
  315.                 End If
  316.                 intArgIter = intArgIter + 1
  317.  
  318.             Case "/o"
  319.                 If Not blnGetArg("Output File", strOutputFile, intArgIter) Then
  320.                     intParseCmdLine = CONST_ERROR
  321.                     Exit Function
  322.                 End If
  323.                 intArgIter = intArgIter + 1
  324.  
  325.             Case "/u"
  326.                 If Not blnGetArg("User Name", strUserName, intArgIter) Then
  327.                     intParseCmdLine = CONST_ERROR
  328.                     Exit Function
  329.                 End If
  330.                 intArgIter = intArgIter + 1
  331.  
  332.             Case "/w"
  333.                 If Not blnGetArg("User Password", strPassword, intArgIter) Then
  334.                     intParseCmdLine = CONST_ERROR
  335.                     Exit Function
  336.                 End If
  337.                 intArgIter = intArgIter + 1
  338.  
  339.             Case "/p"
  340.                 intParseCmdLine = CONST_PSIZE
  341.                 If Not blnGetArg("Proposed Size", intSize, intArgIter) Then
  342.                     intParseCmdLine = CONST_ERROR
  343.                     Exit Function
  344.                 End If
  345.                 intArgIter = intArgIter + 1
  346.  
  347.             Case Else 'We shouldn't get here
  348.                 Call Wscript.Echo("Invalid or misplaced parameter: " _
  349.                    & Wscript.arguments.Item(intArgIter) & vbCRLF _
  350.                    & "Please check the input and try again," & vbCRLF _
  351.                    & "or invoke with '/?' for help with the syntax.")
  352.                 Wscript.Quit
  353.  
  354.         End Select
  355.  
  356.     Loop '** intArgIter <= Wscript.arguments.Count - 1
  357.  
  358.     If IsEmpty(intParseCmdLine) Then _
  359.         intParseCmdLine = CONST_LIST
  360.  
  361. End Function
  362.  
  363. '********************************************************************
  364. '*
  365. '* Sub ShowUsage()
  366. '*
  367. '* Purpose: Shows the correct usage to the user.
  368. '*
  369. '* Input:   None
  370. '*
  371. '* Output:  Help messages are displayed on screen.
  372. '*
  373. '********************************************************************
  374. Private Sub ShowUsage()
  375.  
  376.     Wscript.Echo ""
  377.     Wscript.Echo "Outputs or modifies the registry configuration."
  378.     Wscript.Echo ""
  379.     Wscript.Echo "SYNTAX:"
  380.     Wscript.Echo "  RegConfig.vbs [/S <server>] [/U <username>]" _
  381.                 &" [/W <password>]"
  382.     Wscript.Echo "  [/O <outputfile>] [/P <proposedsize>]"
  383.     Wscript.Echo ""
  384.     Wscript.Echo "PARAMETER SPECIFIERS:"
  385.     Wscript.Echo "   proposedsize  New proposed size for registry."
  386.     Wscript.Echo "   server        A machine name."
  387.     Wscript.Echo "   username      The current user's name."
  388.     Wscript.Echo "   password      Password of the current user."
  389.     Wscript.Echo "   outputfile    The output file name."
  390.     Wscript.Echo ""
  391.     Wscript.Echo "EXAMPLE:"
  392.     Wscript.Echo "1. cscript RegConfig.vbs"
  393.     Wscript.Echo "   Lists the registry configuration on the current machine."
  394.     Wscript.Echo "2. cscript RegConfig.vbs /S MyMachine2"
  395.     Wscript.Echo "   Lists the registry configuration on machine MyMachine2."
  396.     Wscript.Echo "3. cscript RegConfig.vbs /P 40"
  397.     Wscript.Echo "   Changes the proposed size to 40 MB on the current machine."
  398.  
  399. End Sub
  400.  
  401. '********************************************************************
  402. '* General Routines
  403. '********************************************************************
  404.  
  405. '********************************************************************
  406. '*
  407. '* Function strPackString()
  408. '*
  409. '* Purpose: Attaches spaces to a string to increase the length to intWidth.
  410. '*
  411. '* Input:   strString   a string
  412. '*          intWidth    the intended length of the string
  413. '*          blnAfter    Should spaces be added after the string?
  414. '*          blnTruncate specifies whether to truncate the string or not if
  415. '*                      the string length is longer than intWidth
  416. '*
  417. '* Output:  strPackString is returned as the packed string.
  418. '*
  419. '********************************************************************
  420. Private Function strPackString( ByVal strString, _
  421.                                 ByVal intWidth,  _
  422.                                 ByVal blnAfter,  _
  423.                                 ByVal blnTruncate)
  424.  
  425.     ON ERROR RESUME NEXT
  426.  
  427.     intWidth      = CInt(intWidth)
  428.     blnAfter      = CBool(blnAfter)
  429.     blnTruncate   = CBool(blnTruncate)
  430.  
  431.     If Err.Number Then
  432.         Call Wscript.Echo ("Argument type is incorrect!")
  433.         Err.Clear
  434.         Wscript.Quit
  435.     End If
  436.  
  437.     If IsNull(strString) Then
  438.         strPackString = "null" & Space(intWidth-4)
  439.         Exit Function
  440.     End If
  441.  
  442.     strString = CStr(strString)
  443.     If Err.Number Then
  444.         Call Wscript.Echo ("Argument type is incorrect!")
  445.         Err.Clear
  446.         Wscript.Quit
  447.     End If
  448.  
  449.     If intWidth > Len(strString) Then
  450.         If blnAfter Then
  451.             strPackString = strString & Space(intWidth-Len(strString))
  452.         Else
  453.             strPackString = Space(intWidth-Len(strString)) & strString & " "
  454.         End If
  455.     Else
  456.         If blnTruncate Then
  457.             strPackString = Left(strString, intWidth-1) & " "
  458.         Else
  459.             strPackString = strString & " "
  460.         End If
  461.     End If
  462.  
  463. End Function
  464.  
  465. '********************************************************************
  466. '* 
  467. '*  Function blnGetArg()
  468. '*
  469. '*  Purpose: Helper to intParseCmdLine()
  470. '* 
  471. '*  Usage:
  472. '*
  473. '*     Case "/s" 
  474. '*       blnGetArg ("server name", strServer, intArgIter)
  475. '*
  476. '********************************************************************
  477. Private Function blnGetArg ( ByVal StrVarName,   _
  478.                              ByRef strVar,       _
  479.                              ByRef intArgIter) 
  480.  
  481.     blnGetArg = False 'failure, changed to True upon successful completion
  482.  
  483.     If Len(Wscript.Arguments(intArgIter)) > 2 then
  484.         If Mid(Wscript.Arguments(intArgIter),3,1) = ":" then
  485.             If Len(Wscript.Arguments(intArgIter)) > 3 then
  486.                 strVar = Right(Wscript.Arguments(intArgIter), _
  487.                          Len(Wscript.Arguments(intArgIter)) - 3)
  488.                 blnGetArg = True
  489.                 Exit Function
  490.             Else
  491.                 intArgIter = intArgIter + 1
  492.                 If intArgIter > (Wscript.Arguments.Count - 1) Then
  493.                     Call Wscript.Echo( "Invalid " & StrVarName & ".")
  494.                     Call Wscript.Echo( "Please check the input and try again.")
  495.                     Exit Function
  496.                 End If
  497.  
  498.                 strVar = Wscript.Arguments.Item(intArgIter)
  499.                 If Err.Number Then
  500.                     Call Wscript.Echo( "Invalid " & StrVarName & ".")
  501.                     Call Wscript.Echo( "Please check the input and try again.")
  502.                     Exit Function
  503.                 End If
  504.  
  505.                 If InStr(strVar, "/") Then
  506.                     Call Wscript.Echo( "Invalid " & StrVarName)
  507.                     Call Wscript.Echo( "Please check the input and try again.")
  508.                     Exit Function
  509.                 End If
  510.  
  511.                 blnGetArg = True 'success
  512.             End If
  513.         Else
  514.             strVar = Right(Wscript.Arguments(intArgIter), _
  515.                      Len(Wscript.Arguments(intArgIter)) - 2)
  516.             blnGetArg = True 'success
  517.             Exit Function
  518.         End If
  519.     Else
  520.         intArgIter = intArgIter + 1
  521.         If intArgIter > (Wscript.Arguments.Count - 1) Then
  522.             Call Wscript.Echo( "Invalid " & StrVarName & ".")
  523.             Call Wscript.Echo( "Please check the input and try again.")
  524.             Exit Function
  525.         End If
  526.  
  527.         strVar = Wscript.Arguments.Item(intArgIter)
  528.         If Err.Number Then
  529.             Call Wscript.Echo( "Invalid " & StrVarName & ".")
  530.             Call Wscript.Echo( "Please check the input and try again.")
  531.             Exit Function
  532.         End If
  533.  
  534.         If InStr(strVar, "/") Then
  535.             Call Wscript.Echo( "Invalid " & StrVarName)
  536.             Call Wscript.Echo( "Please check the input and try again.")
  537.             Exit Function
  538.         End If
  539.         blnGetArg = True 'success
  540.     End If
  541. End Function
  542.  
  543. '********************************************************************
  544. '*
  545. '* Function blnConnect()
  546. '*
  547. '* Purpose: Connects to machine strServer.
  548. '*
  549. '* Input:   strServer       a machine name
  550. '*          strNameSpace    a namespace
  551. '*          strUserName     name of the current user
  552. '*          strPassword     password of the current user
  553. '*
  554. '* Output:  objService is returned  as a service object.
  555. '*          strServer is set to local host if left unspecified
  556. '*
  557. '********************************************************************
  558. Private Function blnConnect(ByVal strNameSpace, _
  559.                             ByVal strUserName,  _
  560.                             ByVal strPassword,  _
  561.                             ByRef strServer,    _
  562.                             ByRef objService)
  563.  
  564.     ON ERROR RESUME NEXT
  565.  
  566.     Dim objLocator, objWshNet
  567.  
  568.     blnConnect = False     'There is no error.
  569.  
  570.     'Create Locator object to connect to remote CIM object manager
  571.     Set objLocator = CreateObject("WbemScripting.SWbemLocator")
  572.     If Err.Number then
  573.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & _
  574.                            " occurred in creating a locator object." )
  575.         If Err.Description <> "" Then
  576.             Call Wscript.Echo( "Error description: " & Err.Description & "." )
  577.         End If
  578.         Err.Clear
  579.         blnConnect = True     'An error occurred
  580.         Exit Function
  581.     End If
  582.  
  583.     'Connect to the namespace which is either local or remote
  584.     Set objService = objLocator.ConnectServer (strServer, strNameSpace, _
  585.        strUserName, strPassword)
  586.     ObjService.Security_.impersonationlevel = 3
  587.     If Err.Number then
  588.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & _
  589.                            " occurred in connecting to server " _
  590.            & strServer & ".")
  591.         If Err.Description <> "" Then
  592.             Call Wscript.Echo( "Error description: " & Err.Description & "." )
  593.         End If
  594.         Err.Clear
  595.         blnConnect = True     'An error occurred
  596.     End If
  597.  
  598.     'Get the current server's name if left unspecified
  599.     If IsEmpty(strServer) Then
  600.         Set objWshNet = CreateObject("Wscript.Network")
  601.     strServer     = objWshNet.ComputerName
  602.     End If
  603.  
  604. End Function
  605.  
  606. '********************************************************************
  607. '*
  608. '* Sub      VerifyHostIsCscript()
  609. '*
  610. '* Purpose: Determines which program is used to run this script.
  611. '*
  612. '* Input:   None
  613. '*
  614. '* Output:  If host is not cscript, then an error message is printed 
  615. '*          and the script is aborted.
  616. '*
  617. '********************************************************************
  618. Sub VerifyHostIsCscript()
  619.  
  620.     ON ERROR RESUME NEXT
  621.  
  622.     Dim strFullName, strCommand, i, j, intStatus
  623.  
  624.     strFullName = WScript.FullName
  625.  
  626.     If Err.Number then
  627.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & " occurred." )
  628.         If Err.Description <> "" Then
  629.             Call Wscript.Echo( "Error description: " & Err.Description & "." )
  630.         End If
  631.         intStatus =  CONST_ERROR
  632.     End If
  633.  
  634.     i = InStr(1, strFullName, ".exe", 1)
  635.     If i = 0 Then
  636.         intStatus =  CONST_ERROR
  637.     Else
  638.         j = InStrRev(strFullName, "\", i, 1)
  639.         If j = 0 Then
  640.             intStatus =  CONST_ERROR
  641.         Else
  642.             strCommand = Mid(strFullName, j+1, i-j-1)
  643.             Select Case LCase(strCommand)
  644.                 Case "cscript"
  645.                     intStatus = CONST_CSCRIPT
  646.                 Case "wscript"
  647.                     intStatus = CONST_WSCRIPT
  648.                 Case Else       'should never happen
  649.                     Call Wscript.Echo( "An unexpected program was used to " _
  650.                                        & "run this script." )
  651.                     Call Wscript.Echo( "Only CScript.Exe or WScript.Exe can " _
  652.                                        & "be used to run this script." )
  653.                     intStatus = CONST_ERROR
  654.                 End Select
  655.         End If
  656.     End If
  657.  
  658.     If intStatus <> CONST_CSCRIPT Then
  659.         Call WScript.Echo( "Please run this script using CScript." & vbCRLF & _
  660.              "This can be achieved by" & vbCRLF & _
  661.              "1. Using ""CScript RegConfig.vbs arguments"" for Windows 95/98 or" _
  662.              & vbCRLF & "2. Changing the default Windows Scripting Host " _
  663.              & "setting to CScript" & vbCRLF & "    using ""CScript " _
  664.              & "//H:CScript //S"" and running the script using" & vbCRLF & _
  665.              "    ""RegConfig.vbs arguments"" for Windows NT/2000." )
  666.         WScript.Quit
  667.     End If
  668.  
  669. End Sub
  670.  
  671. '********************************************************************
  672. '*
  673. '* Sub WriteLine()
  674. '* Purpose: Writes a text line either to a file or on screen.
  675. '* Input:   strMessage  the string to print
  676. '*          objFile     an output file object
  677. '* Output:  strMessage is either displayed on screen or written to a file.
  678. '*
  679. '********************************************************************
  680. Sub WriteLine(ByVal strMessage, ByVal objFile)
  681.  
  682.     On Error Resume Next
  683.     If IsObject(objFile) then        'objFile should be a file object
  684.         objFile.WriteLine strMessage
  685.     Else
  686.         Call Wscript.Echo( strMessage )
  687.     End If
  688.  
  689. End Sub
  690.  
  691. '********************************************************************
  692. '* 
  693. '* Function blnErrorOccurred()
  694. '*
  695. '* Purpose: Reports error with a string saying what the error occurred in.
  696. '*
  697. '* Input:   strIn        string saying what the error occurred in.
  698. '*
  699. '* Output:  displayed on screen 
  700. '* 
  701. '********************************************************************
  702. Private Function blnErrorOccurred (ByVal strIn)
  703.  
  704.     If Err.Number Then
  705.         Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & ": " & strIn)
  706.         If Err.Description <> "" Then
  707.             Call Wscript.Echo( "Error description: " & Err.Description)
  708.         End If
  709.         Err.Clear
  710.         blnErrorOccurred = True
  711.     Else
  712.         blnErrorOccurred = False
  713.     End If
  714.  
  715. End Function
  716.  
  717. '********************************************************************
  718. '* 
  719. '* Function blnOpenFile
  720. '*
  721. '* Purpose: Opens a file.
  722. '*
  723. '* Input:   strFileName        A string with the name of the file.
  724. '*
  725. '* Output:  Sets objOpenFile to a FileSystemObject and setis it to 
  726. '*            Nothing upon Failure.
  727. '* 
  728. '********************************************************************
  729. Private Function blnOpenFile(ByVal strFileName, ByRef objOpenFile)
  730.  
  731.     ON ERROR RESUME NEXT
  732.  
  733.     Dim objFileSystem
  734.  
  735.     Set objFileSystem = Nothing
  736.  
  737.     If IsEmpty(strFileName) OR strFileName = "" Then
  738.         blnOpenFile = False
  739.         Set objOpenFile = Nothing
  740.         Exit Function
  741.     End If
  742.  
  743.     'Create a file object
  744.     Set objFileSystem = CreateObject("Scripting.FileSystemObject")
  745.     If blnErrorOccurred("Could not create filesystem object.") Then
  746.         blnOpenFile = False
  747.         Set objOpenFile = Nothing
  748.         Exit Function
  749.     End If
  750.  
  751.     'Open the file for output
  752.     Set objOpenFile = objFileSystem.OpenTextFile(strFileName, 8, True)
  753.     If blnErrorOccurred("Could not open") Then
  754.         blnOpenFile = False
  755.         Set objOpenFile = Nothing
  756.         Exit Function
  757.     End If
  758.     blnOpenFile = True
  759.  
  760. End Function
  761.  
  762. '********************************************************************
  763. '*                                                                  *
  764. '*                           End of File                            *
  765. '*                                                                  *
  766. '********************************************************************
  767.  
  768.  
  769.