Помощь со скриптом для автоматизации обновлений с PowerShell - PullRequest
0 голосов
/ 11 мая 2018

Мне любопытно, если кто-то может указать мне правильное направление здесь. Я поддерживаю программу, которая имеет несколько возможных версий. Некоторые из моих клиентов всегда используют последнюю версию, в то время как другие, похоже, обновляются только раз в несколько лет. Когда программное обеспечение обновлено, вы должны устанавливать каждую последующую версию, пока не доберетесь до нужной новой версии. Так что, если у нас есть версии 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?

Надеюсь, что это имеет смысл, и любая помощь будет отличной!

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Это всего лишь черновик. В вашем случае я бы использовал оператор Switch внутри цикла Do

$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) 
0 голосов
/ 11 мая 2018

Учитывая вашу проблему и предполагая, что у вас достаточно знаний для запуска установки:

$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')
...