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

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