WINDOWS脚本实践:为SAP补丁制作的VBS脚本

来源:互联网 发布:编程makeblock小车 编辑:程序博客网 时间:2024/05/16 08:43

脚本主要功能包括:

  1. 注册表读取与修改
  2. 文件内容修改如HOSTS、SERVICES文件
  3. 文件属性修改和文件复制
  4. 系统环境变量设置

等,仅供参考 

'SAP设置脚本
'
编写:SCZ 2005.04.20
'
最后修改日期: 2005.04.22
'
必须存在目录: BW(补丁文件) 和 登入界面
'
========================================================================
'
全局变量、处理过程
'
========================================================================
WScript.Echo "该脚本只能正常运行在WIN2000/XP/2003的操作系统管理员权限下,按'确定'继续"
Set objFSO = CreateObject("Scripting.FileSystemObject"'文件系统对象
strWindir = GetWindir()                    '获取WINDOWS目录
strSystem = GetSystemPath()                '获取System目录
strSapPath = GetSAPPath()                 'SAP FrontEnd目录
strSapGuiPath = strSapPath & "SAPgui"            'SapGui目录
strSapBWPath = strSapPath & "BW"            'BW目录
strHostPath = GetHostFilePath()             'host 文件所在目录
strServicesPath = GetServicesPath()             'services 文件所在目录

Call CopyFiles()                    '复制文件
Call ModifyHost(strHostPath)                '修改HOST文件
Call ModifyServices(strServicesPath)            '修改SERVICES文件
Call SetEvn(strSapGuiPath)                '设置环境变量
Call SetTCPIP(strServicesPath)                '修改TCPIP参数
WScript.Echo "BW设置处理完毕,请手动安装SAP系统补丁"



'========================================================================
'
通过注册获取SAP FrontEnd目录
'
========================================================================
Function GetSAPPath()
    
Const HKEY_LOCAL_MACHINE = &H80000002
    strComputer 
= "."
    
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!/" & _
         strComputer 
& " ootdefault:StdRegProv")
  
    strKeyPath 
= "SOFTWARESAPSAP Shared"
    strEntryName 
= "SAPdestdir"
    objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strValue
    GetSAPPath 
= strValue
    
If IsNull(strValue) Then 
        Wscript.Echo 
"SAP注册信息读取失败,SAP未安装或系统已损坏,安装终止"
        Err.Raise(
507)
        Err.Clear
    
End If
End Function


'========================================================================
'
获取WINDOWS目录
'
========================================================================
Function GetWindir()
    
Const WindowFolder = 0
    
Set GetWindir = objFSO.GetSpecialFolder(WindowFolder)
End Function


'========================================================================
'
获取SYSTEM目录
'
========================================================================
Function GetSystemPath()
    
Const SystemFolder = 1
    
Set GetSystemPath = objFSO.GetSpecialFolder(SystemFolder)
End Function


'========================================================================
'
获取HOST文件所在目录
'
========================================================================
Function GetHostFilePath()
    GetHostFilePath 
= strSystem & "driversetc"
End Function


'========================================================================
'
获取Services文件所在目录
'
========================================================================
Function GetServicesPath()
    GetServicesPath 
= strSystem & "driversetc"
End Function

'========================================================================
'
复制文件
'
========================================================================
Function CopyFiles()
    
If NOT objFSO.FolderExists(strSapBWPath) Then  
        WScript.Echo 
"BW组件未安装,请先安装SAP的BW组件,再运行该脚本"
        Err.Raise(
507)
        Err.Clear
    
End If
    
    
Call ClearAttribs(strSapBWPath)
    
    objFSO.CopyFile 
"登陆界面*.ini" , strWindir
    objFSO.CopyFile 
"BWgssntlm.dll" , strSapGuiPath & "gssntlm.dll"
    objFSO.CopyFile 
"BWsncgss32.dll" , strSystem  & "sncgss32.dll"

    strBakFolder 
=strSapBWPath & "ak"
    
IF NOT objFSO.FolderExists(strBakFolder) Then  
        objFSO.CreateFolder(strBakFolder)
    
Else 
        
Call ClearAttribs(strBakFolder)
    
End If
    
    objFSO.CopyFile strSapBWPath 
& "*.xla" , strBakFolder
    objFSO.CopyFile 
"BW*.xla" , strSapBWPath
End Function

'========================================================================
'
去除文件只读属性
'
========================================================================
Function ClearAttribs(strFolder)
    
Call ClearFileAttrib(strFolder & "sapbex.xla")
    
Call ClearFileAttrib(strFolder & "sapbexc.xla")
    
Call ClearFileAttrib(strFolder & "sapbexs.xla")
    
Call ClearFileAttrib(strFolder & "sapbex0.xla")
    
Call ClearFileAttrib(strSystem  & "sncgss32.dll")
End Function

'========================================================================
'
去除文件只读属性
'
========================================================================
Function ClearFileAttrib(strFile)
    
If objFSO.FileExists(strFile) Then 
        
Set f = objFSO.GetFile(strFile)
        f.Attributes 
= 0
    
End If 
End Function

'========================================================================
'
修改HOST文件
'
========================================================================
Function ModifyHost(strHostPath)
    strHostFile 
= strHostPath & "hosts"
    strHostBak 
= strHostPath & "hosts.bak"
    
Const ForReading = 1, ForWriting = 2, ForAppending = 8
    objFSO.CopyFile strHostFile , strHostBak
    
Set objFile = objFSO.OpenTextFile(strHostFile, ForReading, False)
    strContents 
= objFile.ReadAll
    objFile.Close

    
Set objFile = objFSO.OpenTextFile(strHostFile, ForAppending, False)
    objFile.WriteBlankLines 
1
    compResult 
= Instr(strContents,"192.168.0.136")
    
If compResult = 0 Then objFile.WriteLine("192.168.0.136" & Chr(9& "bwprd")
    compResult 
= Instr(strContents,"192.168.0.135")
    
If compResult = 0 Then objFile.WriteLine("192.168.0.135" & Chr(9& "bwdev")
    compResult 
= Instr(strContents,"192.168.0.171")
    
If compResult = 0 Then objFile.WriteLine("192.168.0.171" & Chr(9& "bwqas")
    objFile.close
End Function 

'========================================================================
'
修改SERVICES文件
'
========================================================================
Function ModifyServices(strServicesPath)
    strServicesFile 
= strServicesPath & "services"
    strServicesbak 
= strServicesPath & "services.bak"
    
Const ForReading = 1, ForWriting = 2, ForAppending = 8
    objFSO.CopyFile strServicesFile , strServicesbak
    
Set objFile = objFSO.OpenTextFile(strServicesFile, ForReading, False)
    strContents 
= objFile.ReadAll
    objFile.Close

    
Set objFile = objFSO.OpenTextFile(strServicesFile, ForAppending, False)
    objFile.WriteBlankLines 
1
    compResult 
= Instr(strContents, "sapmsP01")
    
If compResult = 0 Then objFile.WriteLine("sapmsP01" & Chr(9& "3600/tcp")
    objFile.Close
End Function 

'========================================================================
'
设置环境变量
'
------------------------------------------------------------------------
Function SetEvn(strSapGuiPath)
    strComputer 
= "."
    
Set objWMIService = GetObject("winmgmts:/" & strComputer & " ootcimv2")
    
Set colItems = objWMIService.ExecQuery( "Select * from Win32_Environment where name = 'SNC_LIB'")
    Found 
= False

    
For Each objItem in colItems
        
If UCase(objItem.Name) = "SNC_LIB" Then
                Found 
= True
                objItem.VariableValue 
= strSapGuiPath & "gssntlm.dll"
                objItem.Put_
           
End If
    
Next
        
    
If (Found = FalseThen  
            
Set oEvn = objWMIService.Get("Win32_Environment").Spawninstance_
            oEvn.Name 
= "SNC_LIB"
            oEvn.VariableValue 
= strSapGuiPath & "gssntlm.dll"
            oEvn.SystemVariable 
= True
            oEvn.UserName 
= "<SYSTEM>"
            oEvn.Status 
= "OK"
            
Set oPath = oEvn.Put_
     
End If

End Function

'========================================================================

'========================================================================
'
设置TCP/IP参数
'
------------------------------------------------------------------------
Function SetTCPIP(strServicesPath)
    
Const HKEY_LOCAL_MACHINE = &H80000002
    strComputer 
= "."
    
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!/" & _
         strComputer 
& " ootdefault:StdRegProv")
  
    strKeyPath 
= "SYSTEMCurrentControlSetServicesTcpipParameters"
    strEntryName 
= "DataBasePath"
    objReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strEntryName,strServicesPath
End Function
'========================================================================
 
原创粉丝点击