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) 文件:
复制代码 代码如下: "****************************************************************************** "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: emp-ac" "Change name of computer to actual administrative workstation or local "path to which log should be copied. g_strRemoteFolder = "\<adminwkstn>c$ emp-ac"
"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
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\." _ &"
ootcimv2") Set colSystems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem") For Each objSytem In colSystems GetComputerName = objSytem.Name Next
"Edit this line to include the server and share name where the Windows XP "Service Pack 2 setup program is located. strInstallPath = "\servernamexpsp2WindowsXP-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
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\" & _ g_strComputer & "
ootdefault: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
Const FORCED_REBOOT = 6 Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate," & _ "(Shutdown)}!\" & g_strComputer & "
ootcimv2") 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
"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 已被告知存在这些损害的可能性。