当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 可以从一台远程服务器运行 SP2 安装程序Install.vbs

VBScript
VBS中SendKeys的基本应用
VBScript教程 第十四课在VBScript中使用对象
VBScript教程 第十三课 VBScript与窗体
VBScript教程 第十二课VBScript页面的简单样例
VBScript教程 第十一课深入VBScript
VBScript教程 第十课 VBScript编码约定
VBScript教程 第九课VBScript过程
VBScript教程 第八课 使用循环语句
VBScript教程 第七课使用条件语句
VBScript教程 第六课VBScript运算符
VBscript教程 第五课 VBScript常数
VBScript教程 第四课VBScript变量
VBScript教程 第三课VBScript数据类型
VBScript教程 第二课在HTML页面中添加VBscript代码
VBScript教程 第一课什么是VBScript
VBScript的入门学习资料
VBScript语法速查及实例说明
MsgBox函数语言参考
VBS教程:正则表达式简介 -后向引用
VBS教程:正则表达式简介 -选择与编组

VBScript 中的 可以从一台远程服务器运行 SP2 安装程序Install.vbs


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 55 ::
收藏到网摘: n/a

Install.vbs
发布者 Microsoft Corporation 脚本专家
此脚本由 scenario1.vbs 在一台网络主机上启动。Install.vbs 可以在安装了 SP2 的主机上以本地方式运行,它执行以下任务:
? 从一台远程服务器运行 SP2 安装程序。
? 在主机上设置 AutoAdmin 和 RunOnce 两个注册表项。
? 将结果记录到文本文件 computername-sp2-instlog.txt 并将该文件复制回管理工作站。
? 强制重新启动,随后 runonce.vbs 将自动启动。

在基本方案中,SP 2 安装程序文件位于列表中的所有网络主机均可访问的一台远程服务器上。在该方案的某种变化方案中,如果将 SP 2 安装程序复制到本地主机并从这里运行,则应重命名此脚本(例如重命名为 install-remote.vbs),然后将 install-local.vbs 重命名为 install.vbs。您还必须对这些脚本中提到的 scenario1.vbs 和新的 install.vbs 做一些细微更改。
有关方案 1 以及各个脚本的作用的进一步说明,请参见对这些脚本的介绍,网址是:
http://www.microsoft.com/technet/scriptcenter/solutions/appcompat.msxp
Install.vbs 对应于 install.cmd,但增加了一些新功能;install.cmd 是 Application Compatibility Testing and Mitigation Guide for Windows XP Service Pack 2(Windows XP Service Pack 2 应用程序兼容性测试和缓解指南)“附录”中介绍的附带脚本之一。您可以从以下网址下载用来安装该指南及其关联脚本的 Windows Installer (.msi) 文件:
http://www.microsoft.com/downloads/details.aspx?FamilyId=9300BECF-2DEE-4772-ADD9-AD0EAF89C4A7&displaylang=en
要使用此脚本,请复制代码,将代码粘贴到记事本中,然后将脚本另存为 install.vbs。此脚本被设计成了作为 scenario1.vbs 启动的进程的一部分自动运行。
脚本代码
复制代码 代码如下:

'******************************************************************************
'install.vbs
'Author: Peter Costantini, the Microsoft Scripting Guys
'Date: 9/1/04
'Must be deployed to a client and launched remotely by scenario1.vbs.
'Assumes that runonce.vbs is in same directory as script.
'Assumes that Windows XP Service Pack 2 setup program is on a remote server
'and runonce.vbs are in same directory as script.
'1. Runs Service Pack 2 setup program from remote server to install
' Windows XP Service Pack 2. This could take one or two hours.
'2. Configures the AutoAdmin and RunOnce registry settings necessary
' to run runonce.vbs.
'3. Logs results to text file, <computername>-sp2-instlog.txt and copies
' the file back to admin workstation.
'4. Forces a reboot of the local machine so that the AutoAdmin and RunOnce
' registry settings take effect.
'******************************************************************************
On Error Resume Next
'Initialize global constants and variables.
Const FOR_APPENDING = 8
g_strLocalFolder = "c:\temp-ac"
'Change name of computer to actual administrative workstation or local
'path to which log should be copied.
g_strRemoteFolder = "\\<adminwkstn>\c$\temp-ac"
'Get computer name.
g_strComputer = GetComputerName
g_strLogFile = g_strComputer & "-sp2-instlog.txt"
'Create log file.
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(g_strLogFile, FOR_APPENDING, True)
objTextStream.WriteLine "Windows XP Service Pack 2 " & _
"Installation and Configuration Log: Phase 1"
objTextStream.WriteLine Now
objTextStream.WriteLine g_strComputer
objTextStream.WriteLine String(Len(g_strComputer), "-")
'Handle logic of calling functions and sub-routines to install Service Pack 2
'and configure AutoAdministration.
blnInstallSP = InstallSP
If blnInstallSP = False Then
CopyLog
WScript.Quit
End If
blnAutoAdmin = ConfigAutoAdmin
If blnAutoAdmin = False Then
CopyLog
WScript.Quit
End If
Reboot
'******************************************************************************
Function GetComputerName
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\." _
&"\root\cimv2")
Set colSystems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
For Each objSytem In colSystems
GetComputerName = objSytem.Name
Next
End Function
'******************************************************************************
Function InstallSP
'Edit this line to include the server and share name where the Windows XP
'Service Pack 2 setup program is located.
strInstallPath = "\\servername\xpsp2\WindowsXP-KB835935-SP2-ENU.exe " & _
"/quiet /norestart /o"
Set WshShell = CreateObject("Wscript.Shell")
Set objExec = WshShell.Exec(strInstallPath)
'This could take one or two hours.
objTextStream.WriteLine "Installation started ..."
If Err = 0 Then
'Loop until Exec is finished - Status = 1.
Do While objExec.Status = 0
'Pause for 10 seconds before checking.
'To reduce network traffic, make interval longer.
WScript.Sleep 10000
Loop
objTextStream.WriteLine "Service Pack 2 installation completed."
InstallSP = True
Else
objTextStream.WriteLine "Unable to install Service Pack 2." & VbCrLf & _
"Error connecting to Service Pack 2 on server." & VbCrLf & _
"Error number: " & Err.Number & VbCrLf & _
"Error source: " & Err.Source & VbCrLf & _
"Error description: " & Err.Description
InstallSP = False
End If
Err.Clear
End Function
'******************************************************************************
Function ConfigAutoAdmin
Const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath1 = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
strKeyPath2 = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
strDefaultUserName = "Administrator"
strDefaultPassword = "P@ssw0rd"
strDefaultDomainName = "Contoso"
intAutoAdminLogon = 1
strRunOnceEntry = "MyScript"
strRunoncePath = g_strLocalFolder & "\runonce.vbs"
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
g_strComputer & "\root\default:StdRegProv")
'Set strDefaultUserName to user with Administrator credentials.
intRet1 = objReg.SetStringValue(HKEY_LOCAL_MACHINE, strKeyPath1, _
"DefaultUserName", strDefaultUserName)
If intRet1 <> 0 Then
objTextStream.WriteLine "Error: DefaultUserName not configured."
End If
'Set strDefaultPassword to password of default username.
intRet2 = objReg.SetStringValue(HKEY_LOCAL_MACHINE, strKeyPath1, _
"DefaultPassword", strDefaultPassword)
If intRet2 <> 0 Then
objTextStream.WriteLine "Error: DefaultPassword not configured."
End If
'Uncomment next 5 lines and edit last parameter if default domain
'for the credentials is different from that already set.
'intRet3 = objReg.SetStringValue(HKEY_LOCAL_MACHINE, strKeyPath1, _
' "DefaultDomainName", strDefaultDomainName)
'If intRet3 <> 0 Then
' objTextStream.WriteLine "Error: DefaultDomainName not configured."
'End If
'Turn on AutoAdminLogon
intRet4 = objReg.SetStringValue(HKEY_LOCAL_MACHINE, strKeyPath1, _
"AutoAdminLogon", "1")
If intRet4 <> 0 Then
objTextStream.WriteLine "Error: AutoAdminLogon not configured."
End If
'Add MyScript entry to RunOnce subkey.
intRet5 = objReg.SetStringValue(HKEY_LOCAL_MACHINE, strKeyPath2, _
strRunOnceEntry, strRunoncePath)
If intRet5 <> 0 Then
objTextStream.WriteLine "Error: MyScript RunOnce entry not configured."
End If
'Check that all registry write operations succeeded.
If (intRet1 + intRet2 + intRet3 + intRet4 + intRet5) = 0 Then
objTextStream.WriteLine "AutoAdminLogon and RunOnce configured."
ConfigAutoAdmin = True
Else
objTextStream.WriteLine "Error: AutoAdminLogon and RunOnce not fully " & _
"configured."
ConfigAutoAdmin = False
End If
End Function
'******************************************************************************
Sub Reboot
Const FORCED_REBOOT = 6
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate," & _
"(Shutdown)}!\\" & g_strComputer & "\root\cimv2")
Set colOSes = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
objTextStream.WriteLine "Attempting to reboot ..."
CopyLog
For Each objOS In colOSes 'Only one objOS in collection
intReturn = objOS.Win32Shutdown(FORCED_REBOOT)
If intReturn <> 0 Then
Set objTextStream = objFSO.OpenTextFile(g_strLogFile, FOR_APPENDING, True)
objTextStream.WriteLine Now
objTextStream.WriteLine "Error: Unable to reboot. " & VbCrLf & _
"Return code: " & intReturn
CopyLog
End If
Next
End Sub
'******************************************************************************
Sub CopyLog
'Close text file.
objTextStream.WriteLine "Closing log and attempting to copy file to " & _
"administrative workstation."
objTextStream.WriteLine
objTextStream.WriteLine String(80, "-")
objTextStream.WriteLine
objTextStream.Close
'Copy log.
If Not objFSO.FolderExists(g_strRemoteFolder) Then
objFSO.CreateFolder(g_strRemoteFolder)
If Err <> 0 Then
Err.Clear
Exit Sub
End If
End If
objFSO.CopyFile g_strLogFile, g_strRemoteFolder & "\"
End Sub

要获得在线同行支持,请加入 msnews.microsoft.com 新闻服务器上的 microsoft.public.windows.server.scripting 社区。要提供反馈或报告示例脚本或“脚本指南”中的错误,请联系 Microsoft TechNet。
免责声明
此示例脚本不受任何 Microsoft 标准支持计划或服务的支持。这里仅按原样提供示例脚本,而不作任何类型的担保。Microsoft 进一步明确拒绝所有的暗示担保,包括但不限于对适销性或对特定目的适用性的任何暗示担保。使用或执行示例脚本和文档所引起的全部风险应由您自己承担。在任何情况下,对于使用或不能使用示例脚本或文档所引起的任何损害(包括但不限于商业利润损失、业务中断、商业信息丢失或其他资金损失所造成的损害),Microsoft、其作者以及参与脚本创建、生产或传递的任何其他人员都概不负责,即使 Microsoft 已被告知存在这些损害的可能性。