首页 > 编程 > VBScript > 正文

Restart.vbs源代码可以重启远程电脑的vbs

2020-06-26 18:03:59
字体:
来源:转载
供稿:网友
代码如下:

'******************************************************************** 
'* 
'* File:           Restart.vbs 
'* Created:        March 1999 
'* Version:        1.0 
'* 
'*  Main Function:  Shutsdown, PowerOff, LogOff, Restarts a machine. 
'* 
'*  Restart.vbs    /S <server> [/U <username>] [/W <password>]  
'*                 [/O <outputfile>] [/L} [/P] [/R] [/Q] [/F] [/T <time in seconds>] 
'* 
'* Copyright (C) 1999 Microsoft Corporation 
'* 
'******************************************************************** 

OPTION EXPLICIT 

    'Define constants 
    CONST CONST_ERROR                   = 0 
    CONST CONST_WSCRIPT                 = 1 
    CONST CONST_CSCRIPT                 = 2 
    CONST CONST_SHOW_USAGE              = 3 
    CONST CONST_PROCEED                 = 4 

    'Shutdown Method Constants 
    CONST CONST_SHUTDOWN                = 1 
    CONST CONST_LOGOFF                  = 0 
    CONST CONST_POWEROFF                = 8 
    CONST CONST_REBOOT                  = 2 
    CONST CONST_FORCE_REBOOT            = 6 
    CONST CONST_FORCE_POWEROFF          = 12 
    CONST CONST_FORCE_LOGOFF            = 4 
    CONST CONST_FORCE_SHUTDOWN          = 5 

    'Declare variables 
    Dim intOpMode, i 
    Dim strServer, strUserName, strPassword, strOutputFile 
    Dim blnLogoff, blnPowerOff, blnReBoot, blnShutDown 
    Dim blnForce 
    Dim intTimer 
    Dim UserArray(3) 
    Dim MyCount 

    'Make sure the host is csript, if not then abort 
    VerifyHostIsCscript() 

    'Parse the command line 
    intOpMode = intParseCmdLine(strServer     ,  _ 
                                strUserName   ,  _ 
                                strPassword   ,  _ 
                                strOutputFile ,  _ 
                                blnLogoff     ,  _ 
                                blnPowerOff   ,  _ 
                                blnReBoot     ,  _ 
                                blnShutdown   ,  _ 
                                blnForce      ,  _ 
                                intTimer         ) 

    Select Case intOpMode 

        Case CONST_SHOW_USAGE 
            Call ShowUsage() 

        Case CONST_PROCEED                  
            Call Reboot(strServer     , _ 
                          strOutputFile , _ 
                          strUserName   , _ 
                          strPassword   , _ 
                          blnReboot     , _ 
                          blnForce      , _ 
                          intTimer        ) 

            Call LogOff(strServer     , _ 
                          strOutputFile , _ 
                          strUserName   , _ 
                          strPassword   , _ 
                          blnLogoff     , _ 
                          blnForce      , _ 
                          intTimer        ) 

            Call PowerOff(strServer     , _ 
                          strOutputFile , _ 
                          strUserName   , _ 
                          strPassword   , _ 
                          blnPowerOff   , _ 
                          blnForce      , _ 
                          intTimer        ) 

            Call ShutDown(strServer     , _ 
                          strOutputFile , _ 
                          strUserName   , _ 
                          strPassword   , _ 
                          blnShutDown   , _ 
                          blnForce      , _ 
                          intTimer        ) 

        Case CONST_ERROR 
            'Do Nothing 

        Case Else                    'Default -- should never happen 
            Call Wscript.Echo("Error occurred in passing parameters.") 

    End Select 


'******************************************************************** 
'* 
'* Sub Reboot() 
'* 
'* Purpose: Reboots a machine. 
'* 
'* Input:   strServer           a machine name 
'*          strOutputFile       an output file name 
'*          strUserName         the current user's name 
'*          strPassword         the current user's password 
'*          blnForce            specifies whether to force the logoff 
'*          intTimer            specifies the amount of time to perform the function 
'* 
'* Output:  Results are either printed on screen or saved in strOutputFile. 
'* 
'******************************************************************** 
Private Sub Reboot(strServer, strOutputFile, strUserName, strPassword, blnReboot, blnForce, intTimer) 


    ON ERROR RESUME NEXT 

    Dim objFileSystem, objOutputFile, objService, objEnumerator, objInstance 
    Dim strQuery, strMessage 
    Dim intStatus 
    ReDim strID(0), strName(0) 

    if blnreboot = false then 
         Exit Sub 
    End if 

    if intTimer > 0 then 
        wscript.echo "Rebooting machine " & strServer & " in " & intTimer & " seconds..." 
        wscript.sleep (intTimer * 1000) 
    End if 

    'Open a text file for output if the file is requested 
    If Not IsEmpty(strOutputFile) Then 
        If (NOT blnOpenFile(strOutputFile, objOutputFile)) Then 
            Call Wscript.Echo ("Could not open an output file.") 
            Exit Sub 
        End If 
    End If 

    'Establish a connection with the server. 
    If blnConnect("root/cimv2" , _ 
                   strUserName , _ 
                   strPassword , _ 
                   strServer   , _ 
                   objService  ) Then 
        Call Wscript.Echo("") 
        Call Wscript.Echo("Please check the server name, " _ 
                        & "credentials and WBEM Core.") 
        Exit Sub 
    End If 

    strID(0) = "" 
    strName(0) = "" 
    strMessage = "" 
    strQuery = "Select * From Win32_OperatingSystem" 

    Set objEnumerator = objService.ExecQuery(strQuery,,0) 
    If Err.Number Then 
        Print "Error 0x" & CStr(Hex(Err.Number)) & " occurred during the query." 
        If Err.Description <> "" Then 
            Print "Error description: " & Err.Description & "." 
        End If 
        Err.Clear 
        Exit Sub 
    End If 

    i = 0 
    For Each objInstance in objEnumerator 
        If blnForce Then 
            intStatus = objInstance.Win32ShutDown(CONST_FORCE_REBOOT) 
        Else 
            intStatus = objInstance.Win32ShutDown(CONST_REBOOT) 
        End If 

        IF intStatus = 0 Then 
            strMessage = "Reboot a machine " & strServer & "." 
        Else 
            strMessage = "Failed to reboot a machine " & strServer & "." 
        End If 
        Call WriteLine(strMessage,objOutputFile) 
    Next 

    If IsObject(objOutputFile) Then 
        objOutputFile.Close 
        Call Wscript.Echo ("Results are saved in file " & strOutputFile & ".") 
    End If 
End Sub 


'******************************************************************** 
'* 
'* Sub LogOff() 
'* 
'* Purpose: Logs off the user currently logged onto a machine. 
'* 
'* Input:   strServer           a machine name 
'*          strOutputFile       an output file name 
'*          strUserName         the current user's name 
'*          strPassword         the current user's password 
'*          blnForce            specifies whether to force the logoff 
'*          intTimer            specifies the amount of time to preform the function 
'* 
'* Output:  Results are either printed on screen or saved in strOutputFile. 
'* 
'******************************************************************** 
Private Sub LogOff(strServer, strOutputFile, strUserName, strPassword, blnLogoff, blnForce, intTimer) 


    ON ERROR RESUME NEXT 

    Dim objFileSystem, objOutputFile, objService, objEnumerator, objInstance 
    Dim strQuery, strMessage 
    Dim intStatus 
    ReDim strID(0), strName(0) 

     If blnlogoff = false then 
          Exit Sub 
     End if 

    if intTimer > 1 then  
     wscript.echo "Logging off machine " & strServer & " in " & intTimer & " seconds..." 
        wscript.sleep (intTimer * 1000) 
    End if 

    'Open a text file for output if the file is requested 
    If Not IsEmpty(strOutputFile) Then 
        If (NOT blnOpenFile(strOutputFile, objOutputFile)) Then 
            Call Wscript.Echo ("Could not open an output file.") 
            Exit Sub 
        End If 
    End If 

    'Establish a connection with the server. 
    If blnConnect("root/cimv2" , _ 
                   strUserName , _ 
                   strPassword , _ 
                   strServer   , _ 
                   objService  ) Then 
        Call Wscript.Echo("") 
        Call Wscript.Echo("Please check the server name, " _ 
                        & "credentials and WBEM Core.") 
        Exit Sub 
    End If 

    strID(0) = "" 
    strName(0) = "" 
    strMessage = "" 
    strQuery = "Select * From Win32_OperatingSystem" 

    Set objEnumerator = objService.ExecQuery(strQuery,,0) 
    If Err.Number Then 
        Print "Error 0x" & CStr(Hex(Err.Number)) & " occurred during the query." 
        If Err.Description <> "" Then 
            Print "Error description: " & Err.Description & "." 
        End If 
        Err.Clear 
        Exit Sub 
    End If 

    i = 0 
    For Each objInstance in objEnumerator 
        If blnForce Then 
            intStatus = objInstance.Win32ShutDown(CONST_FORCE_LOGOFF) 
        Else 
            intStatus = objInstance.Win32ShutDown(CONST_LOGOFF) 
        End If 

        IF intStatus = 0 Then 
            strMessage = "Logging off the current user on machine " & _ 
                         strServer & "..." 
        Else 
            strMessage = "Failed to log off the current user from machine " _ 
                & strServer & "." 
        End If 
        Call WriteLine(strMessage,objOutputFile) 
    Next 

    If IsObject(objOutputFile) Then 
        objOutputFile.Close 
        Call Wscript.Echo ("Results are saved in file " & strOutputFile & ".") 
    End If 
End Sub 


'******************************************************************** 
'* 
'* Sub PowerOff() 
'* 
'* Purpose: Powers off a machine. 
'* 
'* Input:   strServer           a machine name 
'*          strOutputFile       an output file name 
'*          strUserName         the current user's name 
'*          strPassword         the current user's password 
'*          blnForce            specifies whether to force the logoff 
'*          intTimer            specifies the amount of time to perform the function 
'* 
'* Output:  Results are either printed on screen or saved in strOutputFile. 
'* 
'******************************************************************** 
Private Sub PowerOff(strServer, strOutputFile, strUserName, strPassword, blnPowerOff, blnForce, intTimer) 


    ON ERROR RESUME NEXT 

    Dim objFileSystem, objOutputFile, objService, objEnumerator, objInstance 
    Dim strQuery, strMessage 
    Dim intStatus 
    ReDim strID(0), strName(0) 

      if blnPoweroff = false then 
             Exit sub 
      End if 

    If intTimer > 0 then      
        wscript.echo "Powering off machine " & strServer & " in " & intTimer & " seconds..." 
    wscript.sleep (intTimer * 1000) 
    End if 

    'Open a text file for output if the file is requested 
    If Not IsEmpty(strOutputFile) Then 
        If (NOT blnOpenFile(strOutputFile, objOutputFile)) Then 
            Call Wscript.Echo ("Could not open an output file.") 
            Exit Sub 
        End If 
    End If 

    'Establish a connection with the server. 
    If blnConnect("root/cimv2" , _ 
                   strUserName , _ 
                   strPassword , _ 
                   strServer   , _ 
                   objService  ) Then 
        Call Wscript.Echo("") 
        Call Wscript.Echo("Please check the server name, " _ 
                        & "credentials and WBEM Core.") 
        Exit Sub 
    End If 

    strID(0) = "" 
    strName(0) = "" 
    strMessage = "" 
    strQuery = "Select * From Win32_OperatingSystem" 

    Set objEnumerator = objService.ExecQuery(strQuery,,0) 
    If Err.Number Then 
        Print "Error 0x" & CStr(Hex(Err.Number)) & " occurred during the query." 
        If Err.Description <> "" Then 
            Print "Error description: " & Err.Description & "." 
        End If 
        Err.Clear 
        Exit Sub 
    End If 

    i = 0 
    For Each objInstance in objEnumerator 
        If blnForce Then 
            intStatus = objInstance.Win32ShutDown(CONST_FORCE_POWEROFF) 
        Else 
            intStatus = objInstance.Win32ShutDown(CONST_POWEROFF) 
        End If 

        IF intStatus = 0 Then 
            strMessage = "Power off machine " & strServer & "." 
        Else 
            strMessage = "Failed to power off machine " & strServer & "." 
        End If 
        Call WriteLine(strMessage,objOutputFile) 
    Next 

    If IsObject(objOutputFile) Then 
        objOutputFile.Close 
        Call Wscript.Echo ("Results are saved in file " & strOutputFile & ".") 
    End If 
End Sub 


'******************************************************************** 
'* 
'* Sub Shutdown() 
'* 
'* Purpose: Shutsdown a machine. 
'* 
'* Input:   strServer           a machine name 
'*          strOutputFile       an output file name 
'*          strUserName         the current user's name 
'*          strPassword         the current user's password 
'*          blnForce            specifies whether to force the logoff 
'*          intTimer            specifies the amount of time to perform the function 
'* 
'* Output:  Results are either printed on screen or saved in strOutputFile. 
'* 
'******************************************************************** 
Private Sub Shutdown(strServer, strOutputFile, strUserName, strPassword, blnShutDown, blnForce, intTimer) 


    ON ERROR RESUME NEXT 

    Dim objFileSystem, objOutputFile, objService, objEnumerator, objInstance 
    Dim strQuery, strMessage 
    Dim intStatus 
    ReDim strID(0), strName(0) 

    If blnShutdown = False then 
          Exit Sub 
    End if    

    if intTimer > 0 then  
              wscript.echo "Shutting down computer " & strServer & " in " & intTimer & " seconds..." 
         wscript.sleep (intTimer * 1000) 
    End if 


    'Open a text file for output if the file is requested 
    If Not IsEmpty(strOutputFile) Then 
        If (NOT blnOpenFile(strOutputFile, objOutputFile)) Then 
            Call Wscript.Echo ("Could not open an output file.") 
            Exit Sub 
        End If 
    End If 

    'Establish a connection with the server. 
    If blnConnect("root/cimv2" , _ 
                   strUserName , _ 
                   strPassword , _ 
                   strServer   , _ 
                   objService  ) Then 
        Call Wscript.Echo("") 
        Call Wscript.Echo("Please check the server name, " _ 
                        & "credentials and WBEM Core.") 
        Exit Sub 
    End If 

    strID(0) = "" 
    strName(0) = "" 
    strMessage = "" 
    strQuery = "Select * From Win32_OperatingSystem" 

    Set objEnumerator = objService.ExecQuery(strQuery,,0) 
    If Err.Number Then 
        Print "Error 0x" & CStr(Hex(Err.Number)) & " occurred during the query." 
        If Err.Description <> "" Then 
            Print "Error description: " & Err.Description & "." 
        End If 
        Err.Clear 
        Exit Sub 
    End If 

    i = 0 
    For Each objInstance in objEnumerator 
        If blnForce Then 
            intStatus = objInstance.Win32ShutDown(CONST_FORCE_SHUTDOWN) 
        Else 
            intStatus = objInstance.Win32ShutDown(CONST_SHUTDOWN) 
        End If 

        IF intStatus = 0 Then 
            strMessage = "Shuts down machine " & strServer & "." 
        Else 
            strMessage = "Failed to shutdown machine " & strServer & "." 
        End If 
        Call WriteLine(strMessage,objOutputFile) 
    Next 

    If IsObject(objOutputFile) Then 
        objOutputFile.Close 
        Call Wscript.Echo ("Results are saved in file " & strOutputFile & ".") 
    End If 
End Sub 



'******************************************************************** 
'* 
'* Function intParseCmdLine() 
'* 
'* Purpose: Parses the command line. 
'* Input:    
'* 
'* Output:  strServer         a remote server ("" = local server") 
'*          strUserName       the current user's name 
'*          strPassword       the current user's password 
'*          strOutputFile     an output file name 
'*          intTimer          amount of time in seconds 
'* 
'******************************************************************** 
Private Function intParseCmdLine( ByRef strServer,        _ 
                                  ByRef strUserName,      _ 
                                  ByRef strPassword,      _ 
                                  ByRef strOutputFile,    _ 
                                  ByRef blnLogoff,        _ 
                                  ByRef blnShutdown,      _ 
                                  ByRef blnReboot,        _ 
                                  ByRef blnPowerOff,      _ 
                                  ByRef blnForce,         _ 
                                  ByRef intTimer          ) 


    ON ERROR RESUME NEXT 

    Dim strFlag 
    Dim intState, intArgIter 
    Dim objFileSystem 

    If Wscript.Arguments.Count > 0 Then 
        strFlag = Wscript.arguments.Item(0) 
    End If 

    If IsEmpty(strFlag) Then                'No arguments have been received 
        Wscript.Echo("Arguments are Required.") 
        intParseCmdLine = CONST_ERROR 
        Exit Function 
    End If 

    'Check if the user is asking for help or is just confused 
    If (strFlag="help") OR (strFlag="/h") OR (strFlag="/h") OR (strFlag="-h") _ 
        OR (strFlag = "/?") OR (strFlag = "/?") OR (strFlag = "?") _  
        OR (strFlag="h") Then 
        intParseCmdLine = CONST_SHOW_USAGE 
        Exit Function 
    End If 

    'Retrieve the command line and set appropriate variables 
     intArgIter = 0 
    Do While intArgIter <= Wscript.arguments.Count - 1 
        Select Case Left(LCase(Wscript.arguments.Item(intArgIter)),2) 

            Case "/s" 
                intParseCmdLine = CONST_PROCEED 
                If Not blnGetArg("Server", strServer, intArgIter) Then 
                    intParseCmdLine = CONST_ERROR 
                    Exit Function 
                End If 
                intArgIter = intArgIter + 1 

            Case "/o" 
                If Not blnGetArg("Output File", strOutputFile, intArgIter) Then 
                    intParseCmdLine = CONST_ERROR 
                    Exit Function 
                End If 
                intArgIter = intArgIter + 1 

            Case "/u" 
                If Not blnGetArg("User Name", strUserName, intArgIter) Then 
                    intParseCmdLine = CONST_ERROR 
                    Exit Function 
                End If 
                intArgIter = intArgIter + 1 

            Case "/w" 
                If Not blnGetArg("User Password", strPassword, intArgIter) Then 
                    intParseCmdLine = CONST_ERROR 
                    Exit Function 
                End If 
                intArgIter = intArgIter + 1 

            Case "/f" 
                blnForce = True 
                intArgIter = intArgIter + 1 

            Case "/r" 
                blnReBoot = True 
                userarray(0) = blnReBoot 
                intArgIter = intArgIter + 1 

            Case "/q" 
                blnPowerOff = True 
                userarray(1) = blnPowerOff 
                intArgIter = intArgIter + 1 

            Case "/l" 
                blnLogOff = True 
                userarray(2) = blnLogoff 
                intArgIter = intArgIter + 1 

            Case "/p" 
                blnShutDown = True 
                userarray(3) = blnShutDown 
                intArgIter = intArgIter + 1 

            Case "/t" 
                If Not blnGetArg("Timer", intTimer, intArgIter) Then 
                    intParseCmdLine = CONST_ERROR 
                    Exit Function 
                End If 
                intArgIter = intArgIter + 1 

            Case Else 'We shouldn't get here 
                Call Wscript.Echo("Invalid or misplaced parameter: " _ 
                   & Wscript.arguments.Item(intArgIter) & vbCRLF _ 
                   & "Please check the input and try again," & vbCRLF _ 
                   & "or invoke with '/?' for help with the syntax.") 
                Wscript.Quit 

        End Select 

    Loop '** intArgIter <= Wscript.arguments.Count - 1 

    MyCount = 0 

    for i = 0 to 3 
        if userarray(i) = True then 
            MyCount = Mycount + 1 
        End if 
    Next 

   if Mycount > 1 then  
        intParseCmdLine = CONST_SHOW_USAGE 
   End if 

    If IsEmpty(intParseCmdLine) Then  
        intParseCmdLine = CONST_ERROR 
        Wscript.Echo("Arguments are Required.") 
    End If 

End Function 

'******************************************************************** 
'* 
'* Sub ShowUsage() 
'* 
'* Purpose: Shows the correct usage to the user. 
'* 
'* Input:   None 
'* 
'* Output:  Help messages are displayed on screen. 
'* 
'******************************************************************** 
Private Sub ShowUsage() 

    Wscript.Echo "" 
    Wscript.Echo "Logoffs, Reboots, Powers Off, or Shuts Down a machine." 
    Wscript.Echo "" 
    Wscript.Echo "SYNTAX:" 
    Wscript.Echo "  Restart.vbs [/S <server>] [/U <username>] [/W <password>]" 
    Wscript.Echo "              [/O <outputfile>] </L> </R> </P> </Q> </F> [/T <time in seconds>]" 
    Wscript.Echo "" 
    Wscript.Echo "PARAMETER SPECIFIERS:" 
    wscript.echo "   /T            Amount of time to perform the function." 
    Wscript.Echo "   /Q            Perform Shutdown." 
    Wscript.Echo "   /P            Perform Poweroff." 
    Wscript.Echo "   /R            Perform Reboot." 
    Wscript.Echo "   /L            Perform Logoff." 
    Wscript.Echo "   /F            Force Function." 
    Wscript.Echo "   server        A machine name." 
    Wscript.Echo "   username      The current user's name." 
    Wscript.Echo "   password      Password of the current user." 
    Wscript.Echo "   outputfile    The output file name." 
    Wscript.Echo "" 
    Wscript.Echo "EXAMPLE:" 
    Wscript.Echo "1. cscript Restart.vbs /S MyMachine2 /R" 
    Wscript.Echo "   Reboots the current machine MyMachine2." 
    Wscript.Echo "2. cscript Restart.vbs /S MyMachine2 /R /F" 
    Wscript.Echo "   Forces MyMachine2 to reboot." 
    Wscript.Echo "3. cscript Restart.vbs /S MyMachine2 /R /T 30" 
    Wscript.Echo "   Reboots the current machine MyMachine2 in 30 seconds." 
    Wscript.Echo "NOTE:" 
    Wscript.Echo "   The force option will make the machine perform the function even " _ 
               & "if there are" 
    Wscript.Echo "   open and unsaved docuements on the screen." 

End Sub 

'******************************************************************** 
'* General Routines 
'******************************************************************** 

'******************************************************************** 
'* 
'* Function strPackString() 
'* 
'* Purpose: Attaches spaces to a string to increase the length to intWidth. 
'* 
'* Input:   strString   a string 
'*          intWidth    the intended length of the string 
'*          blnAfter    Should spaces be added after the string? 
'*          blnTruncate specifies whether to truncate the string or not if 
'*                      the string length is longer than intWidth 
'* 
'* Output:  strPackString is returned as the packed string. 
'* 
'******************************************************************** 
Private Function strPackString( ByVal strString, _ 
                                ByVal intWidth,  _ 
                                ByVal blnAfter,  _ 
                                ByVal blnTruncate) 

    ON ERROR RESUME NEXT 

    intWidth      = CInt(intWidth) 
    blnAfter      = CBool(blnAfter) 
    blnTruncate   = CBool(blnTruncate) 

    If Err.Number Then 
        Call Wscript.Echo ("Argument type is incorrect!") 
        Err.Clear 
        Wscript.Quit 
    End If 

    If IsNull(strString) Then 
        strPackString = "null" & Space(intWidth-4) 
        Exit Function 
    End If 

    strString = CStr(strString) 
    If Err.Number Then 
        Call Wscript.Echo ("Argument type is incorrect!") 
        Err.Clear 
        Wscript.Quit 
    End If 

    If intWidth > Len(strString) Then 
        If blnAfter Then 
            strPackString = strString & Space(intWidth-Len(strString)) 
        Else 
            strPackString = Space(intWidth-Len(strString)) & strString & " " 
        End If 
    Else 
        If blnTruncate Then 
            strPackString = Left(strString, intWidth-1) & " " 
        Else 
            strPackString = strString & " " 
        End If 
    End If 

End Function 

'******************************************************************** 
'*  
'*  Function blnGetArg() 
'* 
'*  Purpose: Helper to intParseCmdLine() 
'*  
'*  Usage: 
'* 
'*     Case "/s"  
'*       blnGetArg ("server name", strServer, intArgIter) 
'* 
'******************************************************************** 
Private Function blnGetArg ( ByVal StrVarName,   _ 
                             ByRef strVar,       _ 
                             ByRef intArgIter)  

    blnGetArg = False 'failure, changed to True upon successful completion 

    If Len(Wscript.Arguments(intArgIter)) > 2 then 
        If Mid(Wscript.Arguments(intArgIter),3,1) = ":" then 
            If Len(Wscript.Arguments(intArgIter)) > 3 then 
                strVar = Right(Wscript.Arguments(intArgIter), _ 
                         Len(Wscript.Arguments(intArgIter)) - 3) 
                blnGetArg = True 
                Exit Function 
            Else 
                intArgIter = intArgIter + 1 
                If intArgIter > (Wscript.Arguments.Count - 1) Then 
                    Call Wscript.Echo( "Invalid " & StrVarName & ".") 
                    Call Wscript.Echo( "Please check the input and try again.") 
                    Exit Function 
                End If 

                strVar = Wscript.Arguments.Item(intArgIter) 
                If Err.Number Then 
                    Call Wscript.Echo( "Invalid " & StrVarName & ".") 
                    Call Wscript.Echo( "Please check the input and try again.") 
                    Exit Function 
                End If 

                If InStr(strVar, "/") Then 
                    Call Wscript.Echo( "Invalid " & StrVarName) 
                    Call Wscript.Echo( "Please check the input and try again.") 
                    Exit Function 
                End If 

                blnGetArg = True 'success 
            End If 
        Else 
            strVar = Right(Wscript.Arguments(intArgIter), _ 
                     Len(Wscript.Arguments(intArgIter)) - 2) 
            blnGetArg = True 'success 
            Exit Function 
        End If 
    Else 
        intArgIter = intArgIter + 1 
        If intArgIter > (Wscript.Arguments.Count - 1) Then 
            Call Wscript.Echo( "Invalid " & StrVarName & ".") 
            Call Wscript.Echo( "Please check the input and try again.") 
            Exit Function 
        End If 

        strVar = Wscript.Arguments.Item(intArgIter) 
        If Err.Number Then 
            Call Wscript.Echo( "Invalid " & StrVarName & ".") 
            Call Wscript.Echo( "Please check the input and try again.") 
            Exit Function 
        End If 

        If InStr(strVar, "/") Then 
            Call Wscript.Echo( "Invalid " & StrVarName) 
            Call Wscript.Echo( "Please check the input and try again.") 
            Exit Function 
        End If 
        blnGetArg = True 'success 
    End If 
End Function 

'******************************************************************** 
'* 
'* Function blnConnect() 
'* 
'* Purpose: Connects to machine strServer. 
'* 
'* Input:   strServer       a machine name 
'*          strNameSpace    a namespace 
'*          strUserName     name of the current user 
'*          strPassword     password of the current user 
'* 
'* Output:  objService is returned  as a service object. 
'*          strServer is set to local host if left unspecified 
'* 
'******************************************************************** 
Private Function blnConnect(ByVal strNameSpace, _ 
                            ByVal strUserName,  _ 
                            ByVal strPassword,  _ 
                            ByRef strServer,    _ 
                            ByRef objService) 

    ON ERROR RESUME NEXT 

    Dim objLocator, objWshNet 

    blnConnect = False     'There is no error. 

    'Create Locator object to connect to remote CIM object manager 
    Set objLocator = CreateObject("WbemScripting.SWbemLocator") 
    If Err.Number then 
        Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & _ 
                           " occurred in creating a locator object." ) 
        If Err.Description <> "" Then 
            Call Wscript.Echo( "Error description: " & Err.Description & "." ) 
        End If 
        Err.Clear 
        blnConnect = True     'An error occurred 
        Exit Function 
    End If 

    'Connect to the namespace which is either local or remote 
    Set objService = objLocator.ConnectServer (strServer, strNameSpace, _ 
       strUserName, strPassword) 
    ObjService.Security_.impersonationlevel = 3 
    If Err.Number then 
        Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & _ 
                           " occurred in connecting to server " _ 
           & strServer & ".") 
        If Err.Description <> "" Then 
            Call Wscript.Echo( "Error description: " & Err.Description & "." ) 
        End If 
        Err.Clear 
        blnConnect = True     'An error occurred 
    End If 

    'Get the current server's name if left unspecified 
    If IsEmpty(strServer) Then 
        Set objWshNet = CreateObject("Wscript.Network") 
    strServer     = objWshNet.ComputerName 
    End If 

End Function 

'******************************************************************** 
'* 
'* Sub      VerifyHostIsCscript() 
'* 
'* Purpose: Determines which program is used to run this script. 
'* 
'* Input:   None 
'* 
'* Output:  If host is not cscript, then an error message is printed  
'*          and the script is aborted. 
'* 
'******************************************************************** 
Sub VerifyHostIsCscript() 

    ON ERROR RESUME NEXT 

    Dim strFullName, strCommand, i, j, intStatus 

    strFullName = WScript.FullName 

    If Err.Number then 
        Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & " occurred." ) 
        If Err.Description <> "" Then 
            Call Wscript.Echo( "Error description: " & Err.Description & "." ) 
        End If 
        intStatus =  CONST_ERROR 
    End If 

    i = InStr(1, strFullName, ".exe", 1) 
    If i = 0 Then 
        intStatus =  CONST_ERROR 
    Else 
        j = InStrRev(strFullName, "/", i, 1) 
        If j = 0 Then 
            intStatus =  CONST_ERROR 
        Else 
            strCommand = Mid(strFullName, j+1, i-j-1) 
            Select Case LCase(strCommand) 
                Case "cscript" 
                    intStatus = CONST_CSCRIPT 
                Case "wscript" 
                    intStatus = CONST_WSCRIPT 
                Case Else       'should never happen 
                    Call Wscript.Echo( "An unexpected program was used to " _ 
                                       & "run this script." ) 
                    Call Wscript.Echo( "Only CScript.Exe or WScript.Exe can " _ 
                                       & "be used to run this script." ) 
                    intStatus = CONST_ERROR 
                End Select 
        End If 
    End If 

    If intStatus <> CONST_CSCRIPT Then 
        Call WScript.Echo( "Please run this script using CScript." & vbCRLF & _ 
             "This can be achieved by" & vbCRLF & _ 
             "1. Using ""CScript Restart.vbs arguments"" for Windows 95/98 or" _ 
             & vbCRLF & "2. Changing the default Windows Scripting Host " _ 
             & "setting to CScript" & vbCRLF & "    using ""CScript " _ 
             & "//H:CScript //S"" and running the script using" & vbCRLF & _ 
             "    ""Restart.vbs arguments"" for Windows NT/2000." ) 
        WScript.Quit 
    End If 

End Sub 

'******************************************************************** 
'* 
'* Sub WriteLine() 
'* Purpose: Writes a text line either to a file or on screen. 
'* Input:   strMessage  the string to print 
'*          objFile     an output file object 
'* Output:  strMessage is either displayed on screen or written to a file. 
'* 
'******************************************************************** 
Sub WriteLine(ByVal strMessage, ByVal objFile) 

    On Error Resume Next 
    If IsObject(objFile) then        'objFile should be a file object 
        objFile.WriteLine strMessage 
    Else 
        Call Wscript.Echo( strMessage ) 
    End If 

End Sub 

'******************************************************************** 
'*  
'* Function blnErrorOccurred() 
'* 
'* Purpose: Reports error with a string saying what the error occurred in. 
'* 
'* Input:   strIn        string saying what the error occurred in. 
'* 
'* Output:  displayed on screen  
'*  
'******************************************************************** 
Private Function blnErrorOccurred (ByVal strIn) 

    If Err.Number Then 
        Call Wscript.Echo( "Error 0x" & CStr(Hex(Err.Number)) & ": " & strIn) 
        If Err.Description <> "" Then 
            Call Wscript.Echo( "Error description: " & Err.Description) 
        End If 
        Err.Clear 
        blnErrorOccurred = True 
    Else 
        blnErrorOccurred = False 
    End If 

End Function 

'******************************************************************** 
'*  
'* Function blnOpenFile 
'* 
'* Purpose: Opens a file. 
'* 
'* Input:   strFileName        A string with the name of the file. 
'* 
'* Output:  Sets objOpenFile to a FileSystemObject and setis it to  
'*            Nothing upon Failure. 
'*  
'******************************************************************** 
Private Function blnOpenFile(ByVal strFileName, ByRef objOpenFile) 

    ON ERROR RESUME NEXT 

    Dim objFileSystem 

    Set objFileSystem = Nothing 

    If IsEmpty(strFileName) OR strFileName = "" Then 
        blnOpenFile = False 
        Set objOpenFile = Nothing 
        Exit Function 
    End If 

    'Create a file object 
    Set objFileSystem = CreateObject("Scripting.FileSystemObject") 
    If blnErrorOccurred("Could not create filesystem object.") Then 
        blnOpenFile = False 
        Set objOpenFile = Nothing 
        Exit Function 
    End If 

    'Open the file for output 
    Set objOpenFile = objFileSystem.OpenTextFile(strFileName, 8, True) 
    If blnErrorOccurred("Could not open") Then 
        blnOpenFile = False 
        Set objOpenFile = Nothing 
        Exit Function 
    End If 
    blnOpenFile = True 

End Function 

'******************************************************************** 
'*                                                                  * 
'*                           End of File                            * 
'*                                                                  * 
'********************************************************************
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表