协助使用 PowerShell 自动升级的脚本

Posted

技术标签:

【中文标题】协助使用 PowerShell 自动升级的脚本【英文标题】:Assistance with Script To Automate Upgrades with PowerShell 【发布时间】:2018-10-22 06:16:16 【问题描述】:

我很好奇是否有人可以在这里为我指明正确的方向。我支持具有多个可能版本的程序。我的一些客户总是使用最新版本,而其他客户似乎每隔几年才升级一次。软件升级后,您必须安装每个后续版本,直到获得所需的新版本。因此,如果我们有版本 1、2、3、4...一直到版本 10,并且有人从版本 3 升级到版本 9,我们必须安装 4、5、6、7、8 和然后 9. 目前我们必须手动运行每个单独的版本,所以我正在考虑创建一个脚本,它将静默安装每个版本并在适当的位置停止。

目前,我知道这样做的唯一方法是为原始版本和潜在版本的每个可能的组合编写一个语句。例如:

If starting version is 3 and ending version is 4
    install 4
if starting version is 3 and ending version is 5
    install 4
    install 5
if starting version is 3 and ending version is 6
    install 4
    install 5
    install 6

(是的,我知道这不是正确的 powershell 代码,但我希望你能明白我所说的内容)。

所以在我花太多时间写出每个可能的组合之前(我们有超过 40 种可能的安装),有没有人建议我可以指定安装文件必须运行的顺序,然后提示对于起点和终点,它只会在这些变量之间运行?因此,例如,如果客户使用的是版本 2 并想要升级到版本 8,它只知道从安装 3 开始,然后安装每个后续安装,直到版本 8?

希望这是有道理的,任何帮助都会很棒!

【问题讨论】:

【参考方案1】:

这只是一个草稿。在您的情况下,我会在 Do 循环中使用 Switch 语句

$BaseVersion = Get-Version #however you are checking... maybe a function you build
$TargetVersion = 10
Do

    Switch ($BaseVersion)
    
        1
        
            Write-Host "Starting upgrade to Version 2"
            Install-Version2
        
        2
        
            Write-Host "Starting upgrade to Version 3"
            Install-Version3
        
        default
        
            Write-Host "No Version Detected"
            break
        
    
    Start-Sleep -Seconds 60 #Wait 1 min for install to complete before checking again

    $Global:Baseversion = Get-Version    

Until($BaseVersion -lt $TargetVersion) 

【讨论】:

我不建议对字符串使用-lt @TheIncorrigible1 不错。很抱歉编辑您的答案。我正在尝试编辑我的【参考方案2】:

鉴于您的问题陈述并假设您有足够的知识来运行安装:

$softwareVersion = Get-Version # I assume you have a way to determine this

:installLoop do 
    switch ([version]$softwareVersion) 
        [version]'1.0' 
            Install-V2
        

        <# .. #>

        default 
            # no version?
            break installLoop
        
    

    $softwareVersion = Get-Version 
 until ([version]$softwareVersion -ge [version]'10.0')

【讨论】:

以上是关于协助使用 PowerShell 自动升级的脚本的主要内容,如果未能解决你的问题,请参考以下文章

升级PowerShell至4.0版本

为自动执行设置 PowerShell 脚本

powershell自动化脚本邮件轰炸 广告投递 邮件营销

用于自动安装IIS 7及更高版本的Powershell脚本

使用PowerShell 自动安装.NET4.6.1离线包

无人值守称重系统倒逼协助粮食企业产业的升级