华域联盟 vbs 可以从一台远程服务器运行 SP2 安装程序Install.vbs

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

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 已被告知存在这些损害的可能性。

您可能感兴趣的文章:

本文由 华域联盟 原创撰写:华域联盟 » 可以从一台远程服务器运行 SP2 安装程序Install.vbs

转载请保留出处和原文链接:https://www.cnhackhy.com/14641.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部