协助使用 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 自动升级的脚本的主要内容,如果未能解决你的问题,请参考以下文章