65.9K
CodeProject 正在变化。 阅读更多。
Home

自动化 MSI 安装程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (2投票s)

2013年9月12日

CPOL

3分钟阅读

viewsIcon

29839

downloadIcon

298

此工具从分布式服务器复制 MSI 安装程序并将其安装到 VM 工作站。

引言

每当生成构建时,我都需要每天安装我的 MSI 安装程序,并对安装进行冒烟测试。我一直在寻找一些可以解决我问题的免费工具,但找不到。在此之前,我对脚本编写或编程一无所知,并考虑尝试一下。最初,我从批处理命令和 PSTools 开始,但没有找到可靠性,然后我再次开始了对一个好的脚本编写工具的探索,最后以 Windows PowerShell 告终。

这真是太棒了,也是微软的一个非常好的脚本编写语言,您可以使用 UI 自动执行您所做的任何事情。

实用程序的先决条件

安装

  1. 在 VM 机器上安装 Windows PowerShell 3.0,下载地址这里
  2. 设置 PowerShell – 以管理员身份启动 PowerShell 并运行以下命令
    • Set-ExecutionPolicy -ExecutionPolicy Unrestricted [我使用了 Unrestricted,因为我的脚本无法由受信任的发布者签名,为了获得最佳安全性,可以使用“Allsigned”]
    • Enable-PSRemoting –SkipNetworkProfileCheck –Force (全部是) [Enable-PSRemoting 命令在 Windows PowerShell 中启用远程处理。默认情况下,这将创建允许从专用和域网络进行远程访问的网络规则。该命令使用 SkipNetworkProfileCheck 参数允许从同一本地子网中的公共网络进行远程访问。该命令使用 Force 参数来抑制确认消息。]
    • WINRM QC
  3. 禁用 Windows 更新 [这是必需的,因为更新会花费大量时间,并且下一个代码会失败]
  4. 将机器/计算机加入域,并将域用户添加到管理员组
  5. 使用域用户登录到机器
  6. 在注册表中启用自动登录
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\NT\CurrentVersion\Winlogon 
    • AutoAdminLogon = 1
    • DefaultUsername = 域\用户
    • DefaultPassword = 密码(为 DefaultPassword 创建新的字符串值 (REGSZ))
  7. 拍摄快照

要求

  • Windows PowerShell 3.0

支持的平台

  • Windows 2012 Server, Windows 8, Windows 7 SP1 和 Windows 2008 R2 Server SP1

Using the Code

工具的流程

  1. 验证给定位置(共享位置)中是否存在 MSI/MSP
  2. 将 VM 工作站恢复到所需的快照并开启 VM
  3. 将远程计算机添加/加入域
  4. 将所需内容复制到远程计算机
  5. 使用 msiexec.exe 静默安装 MSI
  6. 发送带有良好 HTML 报告的电子邮件

实用程序说明

  • 第 1 部分:核心脚本 DailyBuildModule.psm1,包含用于构建该工具的核心功能
  • 第 2 部分:一个 PowerShell 脚本 Trigger.ps1,用于使用核心脚本文件中的函数触发该工具,因此无需对 DailyBuildModule.psm1 进行任何更改
  • 第 3 部分:配置/初始化脚本 InstallConfig.ps1,其中包含所需的变量

核心脚本 “DailyBuildModule.psm1”:该工具所需的所有函数都写在此脚本中,下面是简要说明

  1. 脚本的入口点是获取运行该实用程序所需的详细信息(变量)。这是由函数“Set-Configuration”完成的,该函数从脚本“InstalConfig.ps1”中读取变量
  2. Resume-SnapShot”和“Start-VM”是恢复到 VM 工作站的所需快照并启动 VM 机器的函数
  3. Join-Domain”函数将计算机加入/添加到域
  4. New-RemotePSSession”为所需的机器创建一个新的 PSSession ,其中包含从“InstalConfig.ps1”读取的所有所需凭据
  5. Copy-ResourceFiles”函数用于将所需文件从源复制到目标(远程机器文件夹),其中远程机器上的文件夹是使用“New-RemoteFolder”创建的
  6. Get-ProductRegKey”函数用于读取已安装产品的注册表。
  7. New-HTMLReport”函数获取系统信息,可以将产品信息添加到其中,并且“Send-eMail”函数发送电子邮件
  8. 函数“Start-Log”、“Write-Log”、“Write-ErrorLog”和“Complete-Log”为该工具创建一个漂亮的日志

Trigger.ps1 导入 DailyBuildModule.psm1,并且使用 cmd-lets 来触发该工具。

InstallConfig.ps1 是分配整个变量的脚本。

注意:不要更改此文件中除其值之外的任何变量名称,但是这些变量值可以直接在 Trigger.ps1 中给出。

© . All rights reserved.